【问题标题】:IE8 not POSTing data after 307 redirect from ASP.NET从 ASP.NET 进行 307 重定向后,IE8 未发布数据
【发布时间】:2011-09-26 20:31:33
【问题描述】:

我正在(重新)编写一个使用 ASP.NET 3.5/SQL Server 作为后端,jQuery/Backbone.js 作为前端的 RESTful 资源调度程序应用程序。在 ASP.NET 中,我使用 WCF 服务,使用 RouteTable 路由将请求路由到适当的 WCF 类。在我的 Global.asax 文件中,我有:

System.Web.Routing.RouteTable.Routes.Add( 
      new System.ServiceModel.Activation.ServiceRoute( 
           "events", factory, typeof( Scheduler.Events ) ) );

在 App_Code 中,我的 IEvents.cs 有这个:

[WebInvoke( Method = "POST", ResponseFormat = WebMessageFormat.Json,
            UriTemplate = "",
            BodyStyle = WebMessageBodyStyle.WrappedRequest )]
SchedulerEvent SaveNewEvent ( SchedulerEvent schedulerEvent );

Events.cs 中的 SaveNewEvent 函数可以发挥所有作用。

由于路由,服务器返回 307 响应 POST 到 /events。 Chrome、Safari 和 Firefox 都按照预期进行,即将请求重新发布到新位置,然后处理响应。 IE8(这是我测试过的所有内容,但我们在这里运行的所有内容)获取 307,但向新 URL 发出 GET 请求,这对我没有任何好处,因为没有发布和保存数据。我知道这一点是因为我使用 Fiddler 跟踪来自 IE 的请求,并且当我调试服务器端代码时,从不调用 SaveNewEvent。

有趣的是,来自 IE 的 PUT 和 DELETE 请求工作正常。

我很难相信 PUT 和 DELETE 会起作用,但 POST 不会。我错过了什么吗?我在 IE8 上找不到任何表明这已损坏的信息。有没有办法通过发出 302 重定向来获得 ASP.NET 路由?那会有用吗?

感谢任何经验、见解、建议或想法。

【问题讨论】:

    标签: jquery asp.net ajax wcf backbone.js


    【解决方案1】:

    虽然 RFC 规定 302 应始终询问用户,但大多数浏览器将其实现为 303 See Other 并相应地在 LOCATION 上获取。虽然这不是严格意义上的 HTTP 1.1,但您对此无能为力,需要处理浏览器的行为。我遇到了同样的问题,也需要解决它。

    【讨论】:

    • 感谢@Femaref 的帮助。我把这个问题搁置了一天,然后又回来了。您对浏览器行为的处理是绝对正确的。就我而言,我假设路由问题导致重定向,但事实并非如此。下面的答案中有更多详细信息。干杯。
    【解决方案2】:

    在给问题一些空间之后,我回过头来发现 307 临时重定向不是由 ServiceRoutes 引起的,而是由 Javascript 中访问我的服务的方式引起的。我的服务 URL 中缺少尾部斜杠。哦:

    EVENTS_URL: "/events"
    

    应该是

    EVENTS_URL: "/events/"
    

    不再重定向,POST 效果很好。

    与我的问题无关,但与 WCF 服务有关,在深入了解这一点时,我遇到了这两个页面,它们帮助我清理了 WCF 代码。仅供参考:

    http://geekswithblogs.net/michelotti/archive/2010/08/21/restful-wcf-services-with-no-svc-file-and-no-config.aspx

    404 when running .net 4 WCF service on IIS (no svc file)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-12-06
      • 1970-01-01
      • 2013-01-07
      • 1970-01-01
      • 2010-09-05
      • 2011-06-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多