使用 ABP 框架自定义 API 响应 HTTP 状态代码
Custom API response HTTP status codes with ABP Framework
有什么方法可以使用 ASP.NET 样板 return 自定义 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!
}
我最终做的是完全替换 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 我们允许您传递响应代码。
示例:抛出新的 UserFriendlyException(302, "Redirecting...");
有什么方法可以使用 ASP.NET 样板 return 自定义 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!
}
我最终做的是完全替换 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 我们允许您传递响应代码。 示例:抛出新的 UserFriendlyException(302, "Redirecting...");