我正在将一条特定的路由重新路由到同一IIS站点中的另一个应用程序,但它位于另一个应用程序池中。尽管我已经用它来重写URL,但不允许在不使用ARR(应用程序请求路由)的情况下将其重写为另一个应用程序池中的应用程序,所以我已经读过。
我目前正在尝试进行重定向,并且似乎可以很好地处理GET请求,但是当我也进行POST调用时,它会失败,并显示“不允许使用方法”。使用小提琴手,当我发送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,但不能重定向方法或请求正文。 这与重写有关吗?如果是这样,则在将请求发送到其他应用程序池中的应用程序时,建议这样做。
答案 0 :(得分:0)
您的规则将以301状态代码重定向作为响应,客户端(我认为是浏览器)然后决定如何处理。如果您的客户端不是浏览器,则可以告诉它将相同的请求重播到新端点。否则,重写(如果需要跨AppPool,则为重写+ ARR)是您的操作方式。
答案 1 :(得分:0)
请尝试将操作类型更改为“重写”,而不是“重定向”。
重定向总是导致重定向头发送到浏览器。这将更改浏览器地址栏中的URL,然后浏览器将为新地址发出HTTP GET。使用HTTP GET,就不会发送任何表单/帖子数据。假定所有参数都在URL查询字符串中。
如果您想避免重定向并使用真正的重写,请将web.config更改为使用action = rewrite。使用此方法,不会将重定向标头发送回浏览器,浏览器地址栏永远不会改变,IIS只是将当前请求流重定向到其他位置。