ASP.NET MVC:奇怪的POST行为

THX*_*138 5 asp.net-mvc redirect asp.net-mvc-routing asp.net-mvc-2

ASP.NET MVC 2 应用程序

我的控制器上有两个动作(Toons):

  1. [GET]列表
  2. [POST]添加

应用程序正在IIS7集成模式下运行,因此/ Toons/List工作正常.但是当我执行POST(内部重定向到/ Toons/List)时,它会重定向(使用302 Object Moved)返回/ Toons/Add.

如果我使用.aspx hack(在IIS6/IIS7经典模式下工作),问题就会消失.

但是如果没有.aspx - GET工作正常,但POST会将我重定向到自己,但使用GET.

我错过了什么?

我正在使用webhost4life.com托管,他们确实已经将IIS7更改为集成模式.

编辑:代码使用UltiDev Cassini服务器按预期工作.

编辑:事实证明,这是一个trash-in-URL问题.如果最后没有斜杠,IIS7会以某种方式正确路由请求.

EDET:行为的说明
当我请求(POST)/Toons/List(没有斜杠)时,IIS没有找到处理程序(我不知道IIS究竟是如何处理URL到处理程序的映射)并重定向请求(使用302代码)/Toons/List/(注意尾随斜杠).

根据HTTP规范,浏览器必须使用相同的方法(在这种情况下为POST)重定向请求,而是处理302,就好像它是303并发出对新URL的GET请求.

这是不正确的,但大多数浏览器的已知行为.

解决方案是使用.aspx-hack使IIS明确地将请求映射到ASP.NET处理程序,或者使用ASP.NET处理程序将IIS配置为处理虚拟目录中的所有内容.

问:有什么更好的方法来处理这个问题?

cRi*_*ter 1

您可以控制您的代码。更改所有不带尾部斜杠的帖子页面以发布到正确的页面。如果是第 3 方客户端,则返回异常,表明他们应该修复该错误。

这是预期的行为,恢复所有可能发生的情况并不是您的工作。但你应该给出好的提示(例如异常消息,而不是奇怪的错误或重定向。)