我们有一个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>
但这似乎不起作用。看起来请求被重写了,但仍然由主网站处理,而不是由子应用程序处理。是否不能重写(不重定向!)从网站到该网站内的子应用程序的请求?如果不是,是否有其他建议将两个应用程序托管在相同的启动路径上(应该保持两个独立的应用程序)?目前,反向代理不可能解决这个问题。
1条答案
按热度按时间dsf9zpds1#
如果要通过在浏览器地址栏中键入/foo来访问以/API开头的请求,可以尝试以下规则: