【问题标题】:URL redirect throws a 405 Method not found when be redirected to other application in different app poolURL 重定向在重定向到不同应用程序池中的其他应用程序时抛出 405 Method not found
【发布时间】:2019-04-09 17:49:59
【问题描述】:

我正在努力将特定路由重新路由到同一 IIS 站点中的不同应用程序,但它位于不同的应用程序池中。虽然我已经得到这个来重写 URL,但它不允许它在不使用 ARR(应用程序请求路由)的情况下重写到不同应用程序池中的应用程序,或者我已经阅读过。

我目前正在尝试仅进行重定向,并且似乎可以很好地处理 GET 请求,但是当我也进行 POST 调用时,它失败并显示“方法不允许”。当我发送 POST 时,使用 fiddler 它正在执行 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


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 2019-10-11
        • 2011-01-05
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-06-19
        • 2016-06-27
        相关资源
        最近更新 更多