问题描述
有什么方法可以使用 ASP.NET Boilerplate 返回自定义 HTTP 状态代码(如 4xx)?
Is there any way to return custom HTTP Status Codes (like 4xx) with ASP.NET Boilerplate?
我想在验证上下文中设置自定义应用程序特定的 HTTP 代码以添加更多粒度.目前,ABP 会为所有验证错误设置 200(OK).
I would like to set custom application specific HTTP codes in context of validation to add more granularity. Currently ABP would set 200(OK) for all validation errors.
在 ABP 源代码中,可以看到如下几个地方,其中 Response.StatusCode
由框架设置,如下所示:
In ABP source code is see few places like one below where Response.StatusCode
is set by the framework like here :
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 异常过滤器.在我的自定义过滤器中,我可以设置我需要的任何状态代码.
What I eventually did was replace ABP exception filter altogether. In my custom filter I could set any status code I need.
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>());
这篇关于使用 ABP 框架自定义 API 响应 HTTP 状态代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!