Mig*_*Mig 5 c# asp.net iis asp.net-web-api2
阅读完以下问题后:
测试未通过IIS 请求过滤(特别是查询字符串长度)的请求并希望执行以下操作:
web.config 中的IIShttpErrors部分设置如下:
<system.webServer>
<modules runAllManagedModulesForAllRequests="true" />
<httpErrors existingResponse="PassThrough" />
</system.webServer>
Run Code Online (Sandbox Code Playgroud)
当遇到太长的请求时,我从 Web API 返回的响应如下:
HTTP/1.1 404 Not Found
Date: Thu, 09 Apr 2015 10:58:34 GMT
Server: Microsoft-IIS/7.5
Content-Length: 0
Run Code Online (Sandbox Code Playgroud)
如果删除httpErrors配置部分,我们将返回 IIS 错误消息 (404.15)。为了尝试解决路由未被命中的问题,我尝试定义一个捕获所有路由来处理任何未知的 URL:
config.Routes.MapHttpRoute(
name: "CatchAll",
routeTemplate: "{*url}",
defaults: new { controller = "Error", action = "NotFound"});
Run Code Online (Sandbox Code Playgroud)
不幸的是,这个控制器动作从未被击中。之后,我想我应该尝试 Web API 跟踪模块来查看是否有任何Web API 管道被命中,而不是调试窗口中没有显示任何内容。
我可以看到请求命中应用程序的唯一位置如下Global.asax:
protected void Application_PreSendRequestHeaders()
{
Response.Headers.Remove("Server");
}
Run Code Online (Sandbox Code Playgroud)
如果我现在重新运行请求,标头将被正确删除,并查看应用程序中的请求属性,一切似乎都已正确设置,甚至查询字符串也被正确保留。
我有什么遗漏的吗?我已经有一个在其他地方使用的全局异常处理程序,以及包装所有响应的委托处理程序,但不幸的是这些都没有被命中。
有没有办法捕获这些请求并将其通过 Web API 处理,或者禁用请求过滤会更好吗?
| 归档时间: |
|
| 查看次数: |
1315 次 |
| 最近记录: |