ASP.NET MVC + IIS7 + FireFox:URL 中的斜杠

Posted

技术标签:

【中文标题】ASP.NET MVC + IIS7 + FireFox:URL 中的斜杠【英文标题】:ASP.NET MVC + IIS7 + FireFox : trailing slash in URL 【发布时间】:2011-01-09 15:46:51 【问题描述】:

注意:我已经挖了好几个小时来寻找答案,但还是找不到。

我有一个托管在 IIS7(集成模式)上的 ASP.NET MVC (2.0) 应用程序。

当向/Toons/List 发出 GET 请求时 - 我会收到重定向 (302) 到 /Toons/List/ 的预期。

问题 但是当我发送 POST 请求时,对/Toons/Add 说(注意没有尾部斜杠)服务器返回,再次将(302)重定向到/Toons/Add/。此时,FireFox 错误地将 GET 请求发送到该重定向到 URL。 IE。 [GET] /Toons/Add/ 而不是 [POST] /Toons/Add/。这是不正确的,但已知的行为。由于/Toons/Add/ 上没有 [GET] - 我找不到资源 (404)。

我使用 webhost4life 托管我的应用程序并且无法访问 IIS7,这限制了我使用 URL 重写和使用模块(我正在与他们合作解决这个问题)。但即便如此,ISAPI 是不是最好的方法?我不知道以这种方式感觉良好。

这一定是一个常见问题,我很惊讶我找不到一个简单的解决方案。

有没有不涉及使用 .aspx / .mvc 后缀和 URL 重写的解决方案? 在这两个中,如果必须,我应该更喜欢哪一个?

有什么想法/建议吗?

编辑: 我已阅读http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx,正如我所说,我正在尝试找到一个更简单的解决方案,即“Just Work”选项。

编辑: 我已经看到了在每个 URL 上附加斜杠 (/) 的解决方案,这似乎不是最优雅的解决方案。

【问题讨论】:

你能告诉我们围绕这个问题的路线和它们各自的Action方法吗? 在请求 /Toons/List 时,我有点困惑是什么导致 /Toons/List/ 出现 302。 +1 用于发布路线或任何导致 302 的原因以及预期的原因。 问题在某个时候消失了,我不知道是什么原因造成的。 【参考方案1】:

你能告诉 IIS 返回 307 而不是 302 吗?

【讨论】:

【参考方案2】:

你是否在控制器中设置了 action 方法来接受 post HttpVerbs?您也可以尝试在 Global.asax 中为 /Toons/Add 设置路由,这样 MVC 就不会将其读取为 /Controller/Method/

【讨论】:

【参考方案3】:

链接时您应该使用实际的 URL/路由。如果由于托管环境或 MVC 框架 2.0 版本的限制而无法从路由中删除斜杠,则需要在 URL 中包含尾部斜杠。

依赖服务器重定向每个 URL 会增加服务器处理时间和页面加载时间。

【讨论】:

以上是关于ASP.NET MVC + IIS7 + FireFox:URL 中的斜杠的主要内容,如果未能解决你的问题,请参考以下文章

IIS7发布asp.net mvc提示404

将 ASP.NET MVC NHibernate 应用程序部署到 IIS7 时出错

IIS7.5 中的 ASP.NET MVC3 401.1 错误

如何使用 ASP.NET Core RC2 MVC6 和 IIS7 获取当前 Windows 用户

IIS7.5下的Asp Net Mvc 4应用程序未重定向到登录页面[重复]

无法让 ELMAH 在 IIS7.5 上与 ASP.NET MVC2 一起使用