0

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

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

现在我已经开始使用 HTML5 和 JavaScript 开发我的网站,并且发现 Delete 和 Put 在任何浏览器中都不是支持方法。我需要将我的 Delete 更改为 Post 以及 Puts。

为此,我需要执行以下任一操作,并且我正在寻找“最佳实践”建议:1.) 创建另一个带有添加参数的 Post 方法以指定它是删除

//This is really my delete method
public virtual HttpResponseMessage Post(TEntity entity, bool delete)

2.)更改路由以使用操作名称,然后将我的 Post 方法命名为“删除”,这将更有意义

//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 方法,但是我的“字符串 id”参数为空。我尝试了两种方法在我的 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);
    }

有什么建议么?

4

2 回答 2

2

你到底是什么意思:

Delete 和 Put 不是任何浏览器中的支持方法

确实,该form元素仅支持 POST 和 GET(尽管有基于隧道的解决方法),但是当您使用 RESTful API 时,您通常通过 JavaScript(例如使用$.ajax)发出 XMLHttpRequest,并且 XMLHttpRequest 支持 GET、POST , PUT 和 DELETE 在所有主要浏览器中。

回到您的确切问题,重新配置路由以使用操作名称并为您的操作提供有意义的名称的方法更加清晰。

关于编辑的更新

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

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);
} 

这应该适用于默认路由。

于 2012-08-28T13:33:49.270 回答
0

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

于 2012-08-28T14:13:26.787 回答