主干RESTful同步:无法在IIS 7.5上启用PUT和DELETE
我尝试了在堆栈溢出上找到的所有解决方案,但没有成功 My web.config包含:主干RESTful同步:无法在IIS 7.5上启用PUT和DELETE,rest,iis,backbone.js,crud,Rest,Iis,Backbone.js,Crud,我尝试了在堆栈溢出上找到的所有解决方案,但没有成功 My web.config包含: <system.webServer> <modules> <remove name="WebDAVModule" /> </modules> <handlers> <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<system.webServer>
<modules>
<remove name="WebDAVModule" />
</modules>
<handlers>
<remove name="ExtensionlessUrlHandler-Integrated-4.0" />
<add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv4.0" />
</handlers>
<httpProtocol>
<customHeaders>
<add name="Access-Control-Allow-Origin" value="*" />
<add name="Access-Control-Allow-Methods" value="POST, GET, DELETE, PUT, OPTIONS" />
<add name="Access-Control-Allow-Headers" value="Origin, X-Requested-With, Content-Type, Accept" />
</customHeaders>
</httpProtocol>
</system.webServer>
我的收藏是:
app.AttendeeCollection = Backbone.Collection.extend({
url: 'http://test-backbone/attendee',
model: app.AttendeeModel
});
我的C#:
问题
- 有什么想法吗
- 有没有办法用POST替换PUT和DELETE(
完整控制器(MVC4、互联网应用程序、本地IIS、Win7)
我想你在寻找: emulateHTTP
Backbone.emulateHTTP=true
如果要使用不支持Backbones默认REST/HTTP方法的旧式web服务器,可以选择启用Backbone.emulateHTTP
。设置此选项将使用HTTPPOST
伪造PUT
和DELETE
请求,并将X-HTTP-Method-Override
头设置为true方法
您可能需要调整服务器代码以查看
X-HTTP-Method-Override
。您可以发布整个attendee controller吗?这是本地的还是在您的服务器上?7.5 iis应该绝对支持所有动词。如果可行,我将使用Web API启动一个新项目。更干净,与主干无缝集成。尽管上述操作仍然有效。@TyroneMichael-Done。谢谢您的帮助。这不是一个真正的应用程序,只是为我的研发团队提供的关于Backbone.js的技术演示。因此,如果所有动词都不起作用,我将使用set/remove而不是save/destroy。
app.AttendeeCollection = Backbone.Collection.extend({
url: 'http://test-backbone/attendee',
model: app.AttendeeModel
});
[AcceptVerbs(HttpVerbs.Put)]
public JsonResult Index(int id, Attendee updatedAttendee)
{
var attendee = db.Attendees.Where(a => a.id == id).FirstOrDefault();
attendee.firstname = updatedAttendee.firstname;
attendee.lastname = updatedAttendee.lastname;
db.SaveChanges();
return Json(attendee, JsonRequestBehavior.DenyGet);
}
using System.Linq;
using System.Web.Mvc;
using AttendeeManager.Models;
namespace AttendeeManager.Controllers
{
public class AttendeeController : Controller
{
AttendeeEntities db = new AttendeeEntities();
[AcceptVerbs(HttpVerbs.Get)]
public JsonResult Index(int? id)
{
if (id.HasValue)
{
var attendee = db.Attendees
.Where(a => a.id == id)
.Select(a => new { id = a.id, firstname = a.firstname, lastname = a.lastname })
.FirstOrDefault();
return Json(attendee, JsonRequestBehavior.AllowGet);
}
else
{
var attendees = db.Attendees
.Select(a => new { id = a.id, firstname = a.firstname, lastname = a.lastname })
.ToList();
return Json(attendees, JsonRequestBehavior.AllowGet);
}
}
[AcceptVerbs(HttpVerbs.Post)]
public JsonResult Index(Attendee createdAttendee)
{
db.Attendees.AddObject(createdAttendee);
db.SaveChanges();
return Json(createdAttendee, JsonRequestBehavior.DenyGet);
}
[AcceptVerbs(HttpVerbs.Put)]
public JsonResult Index(int id, Attendee updatedAttendee)
{
var attendee = db.Attendees.Where(a => a.id == id).FirstOrDefault();
attendee.firstname = updatedAttendee.firstname;
attendee.lastname = updatedAttendee.lastname;
db.SaveChanges();
return Json(attendee, JsonRequestBehavior.DenyGet);
}
[AcceptVerbs(HttpVerbs.Delete)]
public JsonResult Index(int id)
{
var attendee = db.Attendees.Where(a => a.id == id).FirstOrDefault();
db.Attendees.DeleteObject(attendee);
db.SaveChanges();
return Json(attendee, JsonRequestBehavior.DenyGet);
}
}
}