【发布时间】:2015-07-01 10:20:15
【问题描述】:
我应该删除这个问题吗? 我弄清楚问题出在哪里,而不是 IIS...请参阅下面的答案以了解结果。
原始问题 我正在开发一个 ASP.Net MVC 应用程序,但遇到了 URL 重写重定向和 AJAX 请求的奇怪问题。
我在根站点的 Web.config 中添加了以下重写规则。
<rewrite>
<rules>
<rule name="Account" stopProcessing="true">
<match url="^SubApp/Account/(.*)$" />
<action type="Redirect" url="Account/{R:1}" redirectType="Found" />
</rule>
</rules>
</rewrite>
如果我在配置中使用Permanent 或Temporary redirectType 但失败并出现HTTP Error 401.0 - Unauthorized IIS 错误页面,一切似乎都正常。
当我通过浏览器向会触发此规则的操作发出正常的 GET 请求时,例如https://some-site/SubApp/Account/Settings 然后我得到一个 302 Found 并且位置标头设置为预期的 URL https://some-site/Account/Settings 并呈现相应的页面。
但是,当我通过 JQuery 的 AJAX 即 $.get('https://some-site/SubApp/Account/Settings') 发出 GET 请求时,返回的响应状态代码是 401 Unauthorized 但它仍然具有适当的位置标头。
响应的内容是一个标准的 IIS HTTP Error 401.0 - Unauthorized 错误页面。
奇怪的是,如果我在配置中使用Permanent 或Temporary 重定向类型,但只有Found 失败,一切似乎都正常。
/SubApp 是一个单独的应用程序,位于 / 的根站点下方。
发生了什么事?
截图
redirectType="Permanent"
redirectType="Found"
redirectType="Temporary"
从屏幕截图中可以看出,唯一的区别是 Web.config 中指定的 redirectType。
正如您所见,重定向正在按预期发生,但 Found 重定向类型除外,我希望得到 302 - Found 响应重定向到与其他重定向相同的 URL。
【问题讨论】:
-
可以添加代码吗?
-
您能否为两种情况(工作/不工作)添加网络流量的屏幕截图?
-
我能做到,但这是一个相当大的
$.get("/BMS/Account/Settings")。我将用一些屏幕截图更新问题... -
我怀疑您遇到了不同来源的问题。对虚拟 url 使用 url 助手和 tilda 斜线被认为是更好的做法,让框架解决问题。这样您就不太可能得到基于 401 的错误来源。
-
@DaveAlperovich - 如果是这种情况,为什么它适用于
Permanent和Temporary重定向?
标签: ajax asp.net-mvc iis