我正在努力将特定路由重新路由到同一IIS站点中的不同应用程序,但它位于不同的应用程序池中。虽然我已经得到这个来重写URL,但它不允许它重写到不使用ARR(应用程序请求路由)的不同应用程序池中的应用程序,所以我已阅读。
我目前正在尝试进行重定向,并且似乎正在为GET请求做好准备,但是当我也进行POST调用时它会因“不允许方法”而失败。使用fiddler,当我发送POST时,它正在进行GET。
如果有人可以提出一些建议,如果这可能只是重定向URL但保留相同的请求正文和方法?
我的“重写”如下,一些细微的细节发生了变化
<rewrite>
<rules>
<rule name="REST1 to REST2" stopProcessing="true">
<match url="^REST1/Service/([_0-9a-z-]+)" />
<action type="Redirect" url="site.com/REST2/Service/{R:1}" />
</rule>
</rules>
</rewrite>
这似乎重定向URL很好,但不是方法或请求正文。这是否与重写有关?如果是这样,在将请求发送到其他应用程序池中的应用程序时,有任何建议。
您的规则将响应301状态代码重定向,客户端(我假设浏览器)然后决定如何处理。如果您的客户端不是浏览器,您可以告诉它重播相同的请求到新端点。否则,重写(或重写+ ARR,如果你想交叉AppPools)是你如何做到这一点。
请尝试将操作类型更改为“重写”而不是“重定向”。
重定向始终会导致重定向标头发送到浏览器。这会更改浏览器地址栏中的URL,然后浏览器会为新地址发出HTTP GET。使用HTTP GET,不会发送任何表单/发布数据;所有参数都假定在URL查询字符串中。
如果您想避免重定向并使用真正的重写,请将您的web.config更改为使用action = rewrite。使用此方法,没有重定向标头发送回浏览器,浏览器地址栏永远不会更改,IIS只是将当前请求流重定向到其他位置。