2016-07-06 135 views
1

有没有什么办法可以使用ASP.NET Boilerplate返回自定义HTTP状态代码(如4xx)?自定义API响应HTTP状态代码与ABP框架

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

我认为只有'[DontWrapResult]'可以帮助你。 –

回答

1

我最终没有被完全取代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>()); 
+1

出于安全考虑,所有异常和错误都应通过HTTP-200(或任何2xx成功结果)发送给客户端。原因是这样的;像DDOS制造商的攻击者喜欢异常页面和扫描URL来获取任何http错误。除非页面被淹没,否则DDOS攻击可轻松完成。 –