从ASP.NET重定向307后IE8没有POST数据

时间:2011-09-26 20:31:34

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

我正在(重新)编写RESTful资源调度程序应用程序,使用ASP.NET 3.5 / SQL Server作为后端,jQuery / Backbone.js作为前端。在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 );

And Events.cs让SaveNewEvent函数完成了所有的魔法。

由于路由,服务器会向POST返回307响应 / events 。 Chrome,Safari和Firefox都按预期执行操作,即将请求重新发送到新位置,然后处理响应。 IE8(这是我已经测试过的,但它是我们在这里运行的全部)得到307,但是对新URL发出GET,这对我没有任何好处,因为没有数据被POST和保存。我知道这是因为我使用Fiddler跟踪来自IE的请求,当我调试服务器端代码时,永远不会调用SaveNewEvent。

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

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

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

2 个答案:

答案 0 :(得分:0)

虽然RFC声明302应始终询问用户,但大多数浏览器将其实现为303 See Other并相应地在LOCATION上进行GET。虽然这不是严格的HTTP 1.1,但您无法对其进行任何操作,需要使用浏览器的行为。我遇到了同样的问题,也需要解决它。

答案 1 :(得分:0)

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

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)