C# Web API-处理所有请求和错误

C# Web API-处理所有请求和错误,c#,asp.net,iis,asp.net-web-api2,C#,Asp.net,Iis,Asp.net Web Api2,阅读以下问题后: 测试未通过IIS请求筛选的请求(特别是查询字符串长度),并希望执行以下操作: 防止IIS劫持任何错误 Web API/ASP.Net中的钩子来处理这些错误 web.config中的IIShttpErrors部分设置如下: <system.webServer> <modules runAllManagedModulesForAllRequests="true" /> <httpErrors existingRespon

阅读以下问题后:

测试未通过IIS请求筛选的请求(特别是查询字符串长度),并希望执行以下操作:

  • 防止IIS劫持任何错误
  • Web API/ASP.Net中的钩子来处理这些错误
web.config中的IIS
httpErrors
部分设置如下:

 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <httpErrors existingResponse="PassThrough" />
 </system.webServer>
HTTP/1.1 404 Not Found
Date: Thu, 09 Apr 2015 10:58:34 GMT
Server: Microsoft-IIS/7.5
Content-Length: 0
protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
}
如果删除
httpErrors
config部分,我们将返回IIS错误消息(404.15)。为了解决路由未被命中的问题,我尝试定义一个可以处理任何未知URL的全包路由:

config.Routes.MapHttpRoute(
    name: "CatchAll",
    routeTemplate: "{*url}",
    defaults: new { controller = "Error", action = "NotFound"});
不幸的是,此控制器操作从未命中。在这一点之后,我想我应该尝试Web API跟踪模块,看看是否有任何Web API管道被命中,而不是调试窗口中没有显示任何内容

我能看到应用程序中的请求的唯一位置是
Global.asax
,如下所示:

 <system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <httpErrors existingResponse="PassThrough" />
 </system.webServer>
HTTP/1.1 404 Not Found
Date: Thu, 09 Apr 2015 10:58:34 GMT
Server: Microsoft-IIS/7.5
Content-Length: 0
protected void Application_PreSendRequestHeaders()
{
    Response.Headers.Remove("Server");
}
如果我现在重新运行该请求,则头将正确删除,并在应用程序中查看request属性,所有内容似乎都已正确设置,甚至查询字符串也已正确保留

我有什么遗漏吗?我已经有了一个全局异常处理程序,它在别处使用,还有一个委托处理程序,它正在包装所有响应,但不幸的是,它们都没有被命中


有没有办法捕获这些请求并将其通过Web API发送,还是禁用请求过滤更好?

您找到解决此问题的方法了吗?我遇到了同样的问题,我试图重定向到错误控制器上的方法。当我提出请求时,没有任何东西被击中。@ObiEff我想我没有击中。我想我可能在负载平衡器级别或类似级别处理过它