Asp.net 如何将IIS应用程序配置为网关

Asp.net 如何将IIS应用程序配置为网关,asp.net,rest,iis,asp.net-web-api,iis-8,Asp.net,Rest,Iis,Asp.net Web Api,Iis 8,我已经编写了一个ASP.NETWebAPI,它基本上是一个API网关。网关的基本URL是http://localhost:88/ApiGateway。我实现的服务查找一些头值和cookie,以便路由请求。目前我将其用于蓝绿色部署 当找到具有特定API-ID的标头或cookie时,请求将路由到相应的API 例如,如果找到的API-ID是alpha-v1.7.4,URL是http://localhost:88/gateway/app/login.html,请求被路由到http://localhost

我已经编写了一个ASP.NETWebAPI,它基本上是一个API网关。网关的基本URL是
http://localhost:88/ApiGateway
。我实现的服务查找一些头值和cookie,以便路由请求。目前我将其用于蓝绿色部署

当找到具有特定API-ID的标头或cookie时,请求将路由到相应的API

例如,如果找到的API-ID是
alpha-v1.7.4
,URL是
http://localhost:88/gateway/app/login.html
,请求被路由到
http://localhost:8080/app/alpha-v1.7.4/app/login.html
实际应用程序或网站所在的位置

当使用OWIN和Katana时,此功能非常有效。所有URL都已正确路由

在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_a.file
被阻止,但
../../../not_a.file/
通过)

遵循这些指示对我不起作用:

知道如何配置IIS以使其工作吗?

在处理了对我不起作用的问题后,我想出了以下解决方案:

<system.webServer>
  <handlers>
    <clear />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*" verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>


只需清除所有处理程序并添加一个(只有我需要)就可以解决问题。

我不知道您是如何执行重定向的。但也许您需要这样做。@mason:RAMMFAR对我不起作用-不知道为什么不起作用,但我提出了不同的解决方案。