使用ABP框架自定义API响应HTTP状态码

本文关键字:HTTP 状态 响应 API ABP 框架 自定义 使用 | 更新日期: 2023-09-27 17:55:05

是否有任何方法返回自定义HTTP状态码(如4xx)与ASP。净样板吗?

我想在验证上下文中设置自定义应用程序特定的HTTP代码,以增加更多的粒度。目前ABP会为所有验证错误设置200(OK)。

在ABP源代码中可以看到像下面这样的地方,Response.StatusCode是由框架设置的,像这样:

    private void HandleAndWrapException(ExceptionContext context)
    {
        if (!ActionResultHelper.IsObjectResult(context.ActionDescriptor.GetMethodInfo().ReturnType))
        {
            return;
        }
        context.HttpContext.Response.Clear();
        context.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;
        context.Result = new ObjectResult(
            new AjaxResponse(
                _errorInfoBuilder.BuildForException(context.Exception),
                context.Exception is AbpAuthorizationException
            )
        );
        context.Exception = null; //Handled!
    }

使用ABP框架自定义API响应HTTP状态码

我最终做的是完全替换ABP异常过滤器。在我的自定义过滤器中,我可以设置任何我需要的状态码。

var filters = Configuration.Modules.AbpWebApi().HttpConfiguration.Filters;
var currentExceptionFilter = filters
    .First(h => h.Instance is AbpExceptionFilterAttribute).Instance;
filters.Remove(currentExceptionFilter );
filters.Add(IocManager.Resolve<MyApiExceptionFilter>());

你也可以使用UserFriendlyException我们允许你传递响应代码。示例:throw new UserFriendlyException(302, " redirects…");