当重定向到重定向到不同应用程序池中的其他应用程序时,URL重定向会抛出405找不到的方法

问题描述 投票:0回答:2

我正在努力将特定路由重新路由到同一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很好,但不是方法或请求正文。这是否与重写有关?如果是这样,在将请求发送到其他应用程序池中的应用程序时,有任何建议。

c# iis windows-server-2012-r2 iis-8.5
2个回答
0
投票

您的规则将响应301状态代码重定向,客户端(我假设浏览器)然后决定如何处理。如果您的客户端不是浏览器,您可以告诉它重播相同的请求到新端点。否则,重写(或重写+ ARR,如果你想交叉AppPools)是你如何做到这一点。


0
投票

请尝试将操作类型更改为“重写”而不是“重定向”。

重定向始终会导致重定向标头发送到浏览器。这会更改浏览器地址栏中的URL,然后浏览器会为新地址发出HTTP GET。使用HTTP GET,不会发送任何表单/发布数据;所有参数都假定在URL查询字符串中。

如果您想避免重定向并使用真正的重写,请将您的web.config更改为使用action = rewrite。使用此方法,没有重定向标头发送回浏览器,浏览器地址栏永远不会更改,IIS只是将当前请求流重定向到其他位置。

© www.soinside.com 2019 - 2024. All rights reserved.