3

有没有办法使用 ASP.NET 样板返回自定义 HTTP 状态代码(如 4xx)?

我想在验证上下文中设置自定义应用程序特定的 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!
    }
4

2 回答 2

3

我最终所做的是完全替换 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>());
于 2016-07-26T08:31:37.780 回答
0

您还可以使用UserFriendlyException我们允许您传递响应代码。示例: throw new UserFriendlyException (302, "Redirecting...");

于 2020-02-10T05:43:34.910 回答