如何配置IIS应用程序以用作网关

时间:2017-04-07 19:46:38

标签: asp.net rest iis asp.net-web-api iis-8

我编写了一个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以使其正常工作吗?

1 个答案:

答案 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>

只需清除所有处理程序并添加一个处理程序,我只需要解决问题。