【发布时间】: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