ASP.NET MVC4应用程序中的重新路由API

ASP.NET MVC4应用程序中的重新路由API,asp.net,rest,routing,asp.net-mvc-4,asp.net-web-api,Asp.net,Rest,Routing,Asp.net Mvc 4,Asp.net Web Api,我已经编写了一个API,它使用标准HTTP Post、Get、Put和Delete属性以及VS 2012配置的路由 routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } 现在我已经开始使用HTML5和JavaScript开发我的网站,我刚刚发现删除和放置在任何浏览器中都不支持。我需要将我的删除更

我已经编写了一个API,它使用标准HTTP Post、Get、Put和Delete属性以及VS 2012配置的路由

routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
现在我已经开始使用HTML5和JavaScript开发我的网站,我刚刚发现删除和放置在任何浏览器中都不支持。我需要将我的删除更改为帖子和放置

为了做到这一点,我需要执行以下任一操作,我正在寻求“最佳实践”建议: 1.)使用添加的参数创建另一个Post方法,以将其指定为删除

//This is really my delete method
public virtual HttpResponseMessage Post(TEntity entity, bool delete)
2.)更改路由以使用操作名称,然后将我的Post方法命名为“Delete”,这将更有意义

//New Routing
routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

//More meaningful post method
[HttpPost]
public virtual HttpResponseMessage Post(TEntity entity){}
请注意,我希望外部用户能够绑定到API中,这就是我寻求最佳实践建议的原因。在API路由中有{action}是常见的吗

提前谢谢

编辑:

使用Ajax,我在API中使用Delete方法,但是我的“stringid”参数为null。我尝试了两种方法在JavaScript中执行此ajax请求。以下两种方法相同:

    function AjaxReq() {
        $.ajax({
            url: 'http://localhost:49482/api/pallets/',
            type: 'delete',
            data: { id: 12 },
            success: function (response) { alert("Success") },
            error: function (response) { alert("Failed:" + response) }
        });
    }

    function httpRequest() {
        var request = new XMLHttpRequest();
        request.open("delete", "http://localhost:49482/api/pallets/", true);
        request.send("id=12");
        alert(request.responseText);
    }

有什么建议吗?

你所说的:

Delete和Put在任何浏览器中都不支持

确实,
表单
元素只支持POST和GET(尽管有基于隧道的解决方法),但是当您使用RESTful API时,通常是通过JavaScript(例如通过使用
$.ajax
)生成XMLHttpRequest,XMLHttpRequest支持GET、POST、,在所有主要浏览器中放置和删除

回到您的确切问题,重新配置路由以使用操作名称并为您的操作指定有意义的名称的方法更为明确

关于编辑的更新

DELETE方法请求源服务器删除URI标识的资源。实际上,这意味着您应该将Id放入URL中(jQuery仅对GET方法自动执行此操作):


对于默认路由,这应该是正确的。

HTML规范与HTTP规范是分开的。HTML仅支持POST和GET。您需要使用AJAX调用其他方法,如HEAD、OPTIONS、DELETE、PUT、PATCH…

我不知道AJAX可以处理DELETE方法。我创建了一个ajax请求,它在我的API中找到了正确的删除方法。现在我只需要弄清楚为什么参数'string id'为空。@MichaelNorgren向我们展示您的JavaScript和动作符号,我们将尽力提供帮助。我已经用JavaScript更新了我的文章,并使用了我的两个JavaScript函数。这两种情况下,id都为空。谢谢你的帮助!谢谢你,先生。我感谢你的帮助。
function AjaxReq() {
    $.ajax({
        url: 'http://localhost:49482/api/pallets/12',
        type: 'delete',
        success: function (response) { alert("Success") },
        error: function (response) { alert("Failed:" + response) }
    });
}

function httpRequest() {
    var request = new XMLHttpRequest();
    request.open("delete", "http://localhost:49482/api/pallets/12", true);
    request.send();
    alert(request.responseText);
}