我编写了一个ASP.NET Web API,它基本上是一个API网关。网关的基本URL为http://localhost:88/ApiGateway
。我实现的服务会查找一些标头值和cookie以便路由请求。目前我用它进行蓝绿色部署。
当找到具有特定API-ID的标头或cookie时,请求将路由到相应的API。
例如,如果找到的API-ID为alpha-v1.7.4
,且网址为http://localhost:88/gateway/app/login.html
,则请求将路由到实际应用或网站所在的http://localhost:8080/app/alpha-v1.7.4/app/login.html
。
使用OWIN和Katana时,这项工作非常完美。所有网址都已正确路由。
在IIS中安装网关时,事情变得很奇怪。
我在网关中放了一个非常详细的日志记录,记录每个请求和找到的路由。在IIS上,我观察到以下请求到达网关并正确路由:
1: http://localhost:88/gateway/app/some_directory/
2: http://localhost:88/gateway/app/another_directory_with_a.dot/
3: http://localhost:88/gateway/app/some_path_no_trailing_slash
以下请求不到达网关:
4: http://localhost:88/gateway/app/no_trailing_slash_with_a.dot
5: http://localhost:88/gateway/app/index.html
对我而言,似乎IIS正在通过任何目录路径(即使用像.../.../directory/
这样的训练斜线),所有资源路径(即没有像.../.../resource
这样的尾部斜线,它们不像文件一样(因为它们没有点),但阻止了没有尾部斜线但内部有一个点(.../.../may_be_a.file
被阻挡的路径,但是{{1}通过)。
遵循这些说明对我不起作用:How to disable Request Filtering for a specific website on IIS 7.5?
知道如何配置IIS以使其正常工作吗?
答案 0 :(得分:2)
在弄乱RAMMFAR这对我不起作用之后,我找到了解决方案:
<system.webServer>
<handlers>
<clear />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
</system.webServer>
只需清除所有处理程序并添加一个处理程序,我只需要解决问题。