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

时间:2010-01-26 19:09:44

标签: asp.net-mvc iis url-rewriting

注意:我已经花了几个小时挖掘答案,却找不到答案。

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

当向/Toons/List发出GET请求时 - 我得到一个预期的重定向(302)到/Toons/List/

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

我使用webhost4life托管我的应用程序并且无法访问IIS7,这限制了我对URL重写和使用模块的使用(我正在与他们一起解决这个问题)。但是ISAPI是最好的方式吗?我不知道这样做会感觉很好。

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

是否存在不涉及使用.aspx / .mvc后缀和URL重写的解决方案?
在这两个中,如果必须的话,我应该选择哪一个?

有任何想法/建议吗?

修改
我已经阅读了http://www.hanselman.com/blog/ASPNETMVCAndTheNewIIS7RewriteModule.aspx,正如我所说,我正在努力找到一个更简单的解决方案,一个“正常工作”选项。

修改
已经看到了解决方案,并为每个网址添加斜杠(/),再次,似乎不是最优雅的解决方案。

3 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

您是否已在控制器中设置操作方法以接受HttpVerbs后的操作?您还可以尝试在Global.asax中为/ Toons / Add设置路由,以便MVC不将其读取为/ Controller / Method /