ASP.NET MVC 2 应用程序
我的 Controller (卡通)上有两个操作:
应用程序在 IIS7 集成模式下运行,因此/Toons/List 工作正常。但是当我执行 POST(在内部重定向到/Toons/List)时,它会重定向(移动 302 个对象)回到/Toons/Add。
如果我使用 .aspx hack(在 IIS6/IIS7 经典模式下工作),问题就会消失。
但是没有 .aspx - GET 工作正常,但 POST 将我重定向到它自己,但使用 GET。
我错过了什么?
我在 webhost4life.com 上托管,他们确实已经将 IIS7 更改为集成模式。
编辑:该代码使用 UltiDev Cassini 服务器按预期工作。
编辑:结果是 URL 中的尾随斜杠问题。如果末尾没有斜线,IIS7 就无法正确路由请求。
EDET:行为说明
当我请求(POST)时会发生什么
/Toons/List
(没有尾部斜杠),IIS 找不到处理程序(我不知道 IIS 究竟是如何进行 URL 到处理程序映射的)并将请求(使用 302 代码)重定向到 /Toons/List/
(注意尾部斜杠)。根据 HTTP 规范,浏览器必须重定向请求 使用相同的方法 (在这种情况下为 POST),但它处理 302 就好像它是 303 并发出 获取 请求新的 URL。
这是不正确的,但大多数浏览器的已知行为。
解决方案是使用 .aspx-hack 使 IIS 明确如何将请求映射到 ASP.NET 处理程序,或者配置 IIS 以使用 ASP.NET 处理程序处理虚拟目录中的所有内容。
问:处理这个问题的更好方法是什么?
最佳答案
您可以控制自己的代码。
更改所有发布不带斜杠的页面以发布到正确的页面。
如果它的第 3 方客户端返回异常,则他们应该修复该错误。
这是预期的行为,恢复可能发生的一切不是您的工作。
但你应该给出好的提示(例如异常消息,而不是奇怪的错误或重定向。)
关于asp.net-mvc - ASP.NET MVC : strange POST behavior,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2137091/