ASP.NET MVC:奇怪的POST行为

时间:2010-01-26 01:56:09

标签: asp.net-mvc redirect asp.net-mvc-2 asp.net-mvc-routing

ASP.NET MVC 2 app

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

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

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

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

    我错过了什么?

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

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

    编辑:结果是在网址中出现了斜杠式问题。如果最后没有斜杠,IIS7会以某种方式正确路由请求。

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

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

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

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

    问:处理此问题的更好方法是什么?

1 个答案:

答案 0 :(得分:1)

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

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