使用IIS重写规则从主网站重写到子应用程序

jdzmm42g  于 2023-01-21  发布在  其他
关注(0)|答案(1)|浏览(254)

我们有一个ASP.NET Web API应用程序(.NET 4.*),它作为网站托管在IIS中。ASP.NET应用程序包含服务器端呈现的页面,但也包含REST API,可在/api/v1中获得。
一个新的API正在开发中,它使用ASP .NETCore(.NET 7),并将作为IIS应用程序(相信我,我们现在无法绕过它)托管在主网站(包含ASP .NETWebAPI应用程序)下。
新的API应该也可以在/api上使用,但是由于这是主网站下的一个应用程序,如果我们使用/api作为新应用程序,主网站的REST API将不再接收请求。将其托管在/api/v2下是不可能的,因为IIS应用程序不能在别名中包含/(我们也不希望在路径中包含版本)。
相反,我们希望使用另一个名称创建应用程序,例如/foo,并使用web.config中的重写规则将主网站重写为新应用程序,例如:

<system.webServer>
    <rewrite>
      <rules>
        <rule name="Foo">
          <match url="^api\/((?!v1).*)$" />
          <action type="Rewrite" url="foo/{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

但这似乎不起作用。看起来请求被重写了,但仍然由主网站处理,而不是由子应用程序处理。是否不能重写(不重定向!)从网站到该网站内的子应用程序的请求?如果不是,是否有其他建议将两个应用程序托管在相同的启动路径上(应该保持两个独立的应用程序)?目前,反向代理不可能解决这个问题。

dsf9zpds

dsf9zpds1#

如果要通过在浏览器地址栏中键入/foo来访问以/API开头的请求,可以尝试以下规则:

<system.webServer>
    <rewrite>
      <rules>
        <rule name="Foo">
          <match url="foo(.*)" />
          <action type="Rewrite" url="api{R:1}" />
        </rule>
      </rules>
    </rewrite>
  </system.webServer>

相关问题