asp.net-mvc - ASP.NET MVC : strange POST behavior

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

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/

    相关文章:

    c# - fluidvalidation 更改 int/long 的默认错误消息

    c# - 将查询字符串值绑定(bind)到字典

    asp.net - Asp.Net MVC 中的 Html.DisplayFor() 项目列表

    c# - 具有附加一致参数的 ASP.NET MVC 2 路由(不仅仅是 Controller 和操作)

    asp.net-mvc - 尝试通过方法 ... HttpConfiguration ... 访问方法 ... DefaultFormatters ... 失败

    asp.net - 如何在 IIS 7.5 上禁用服务器端缓存 (asp net mvc3)

    redirect - 仅重定向页面的 Google Analytics(分析)速度如此之高

    http - Varnish 重定向

    bash - 子shell IO重定向

    c# - 使用 AutoMoq 创建 Controller 时,Fixture.CreateAnonymous 方法会因错误 (AutoFixture) 终止测试运行程序进程