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 中的斜杠的主要内容,如果未能解决你的问题,请参考以下文章
将 ASP.NET MVC NHibernate 应用程序部署到 IIS7 时出错
IIS7.5 中的 ASP.NET MVC3 401.1 错误
如何使用 ASP.NET Core RC2 MVC6 和 IIS7 获取当前 Windows 用户