0

標準のHTTPPost、Get、Put、およびDelete属性と、VS2012によって構成されたルーティングを使用するAPIを作成しました。

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

HTML5とJavaScriptを使用してWebサイトの開発を開始しましたが、DeleteとPutがどのブラウザーでもサポートされていないことがわかりました。DeleteをPostとPutに変更する必要があります。

そのためには、次のいずれかを実行する必要があり、「ベストプラクティス」のアドバイスを探しています。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リクエストを実行する2つの方法を試しました。両方とも同じ方法で以下にあります:

    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は、どのブラウザでもサポートされているメソッドではありません

要素がPOSTとGETのみをサポートしていることは事実ですform(ただし、これにはトンネリングベースの回避策があります)が、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のみをサポートします。HEAD、OPTIONS、DELETE、PUT、PATCHなどの他のメソッドを呼び出すにはAJAXを使用する必要があります...

于 2012-08-28T14:13:26.787 に答える