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

18
注意:我已经花了数小时寻找答案,但没有找到一个。 我有一个托管在IIS7(集成模式)上的ASP.NET MVC(2.0)应用程序。 当发出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,就像我说的,我正在尝试找到一个更简单的解决方案,一个“只需工作”的选项。

编辑:
我看到过在每个URL后添加斜杠(/)的解决方案,但似乎不是最优雅的解决方案。


1
你能展示一下与这个问题相关的路由以及它们各自的Action方法吗? - George Stocker
我有点困惑是什么原因导致在请求/Toons/List时出现302到/Toons/List/。如果您发布路由或任何导致302的内容以及为什么会出现这种情况,我会给您加1分。 - Jason Capriotti
问题在某个时候消失了,我不知道是什么原因导致的。 - THX-1138
3个回答

1

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

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


0

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


0

你在控制器中设置了接受 post HttpVerbs 的 action 方法了吗?你也可以尝试在 Global.asax 中为 /Toons/Add 设置路由,这样 MVC 就不会将其解析为 /Controller/Method/。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接