2010-01-26 150 views
5

ASP.NET MVC 应用ASP.NET MVC:奇怪POST行为

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

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

应用程序在IIS7集成模式下运行,所以/ Toons/List可以正常工作。但是当我执行POST(重定向到/ Toons/List内部)时,它将重定向(使用302对象移动)回到/ Toons/Add。

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

但是,如果没有的.aspx - 获取做工精细,但POST重定向我拉到本身,而是用GET。

我错过了什么?

我与webhost4life.com托管和他们没有改变对IIS7集成模式了。

编辑:代码按照预期使用UltiDev卡西尼服务器。

编辑:原来是尾随斜杠在-URL问题。不知何故,如果最后没有斜线,IIS7不会正确路由请求。

EDET:行为
会发生什么情况的解释是,当我请求(POST)/Toons/List(没有斜线),IIS没有找到处理程序(我没有知识,了解IIS究竟怎样网址处理器映射),并将请求(使用302代码)重定向到/Toons/List/(通知后面的斜线)。

浏览器,根据HTTP规范,必须重定向使用相同的方法请求(POST在这种情况下),而是它处理302,就好像它是303和问题获取新URL请求。

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

的解决方法是,使用的.aspx,破解,使其明确了IIS如何请求映射到ASP.NET处理程序,或配置IIS来处理使用ASP.NET处理程序中的虚拟目录的一切。

问:什么是更好的方式来处理呢?

+0

什么是你的添加操作的代码? – 2010-01-26 02:05:31

+0

return RedirectToAction(“List”,“Toons”); – 2010-01-26 02:10:11

+0

如果您执行List操作的[GET],会发生什么情况? – 37Stars 2010-02-10 21:58:08

回答

1

你可以控制你的代码。 将所有发布帖子的页面更改为不带结尾斜杠的帖子到正确的页面。 如果它的第三方客户端比返回异常,他们应该修复这个错误。

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

+0

是的,我可以这样解决。我使用ASP.NET MVC的路由,我试图避免黑客入侵MVC的路由添加尾随斜杠到URL。使用UltiDev并不像IIS 7那样(即使用UltiDev,我的代码完全按照我的要求工作)。 – 2010-07-09 14:24:29