2

これらの3つのルートは同じですか?通常はどちらが好ましいですか?

[Route("/todo/{id}", "DELETE")]
[Route("/todo/delete","POST")]
[Route("/todo/delete/{id}","GET")]
public class DeleteTodo : IReturnVoid
{
    public int Id { get; set; }
}

どうもありがとうございます...

4

2 に答える 2

5

DELETEリクエストにはHTTPリクエストボディがないため、実際にはIdpathinfoにを含めることをお勧めします。たとえば、次のようにこの情報を送信できます。

[Route("/todo/{id}", "DELETE")]
public class DeleteTodo : IReturnVoid
{
    public int Id { get; set; }
}

実用的な理由から、私のデフォルト(および一部のプロキシ)のブラウザではDELETEリクエストの送信が許可されていないため、 POSTでDELETEを実行できるようにすることができます。

[Route("/todo/{id}/delete", "POST")]
public class DeleteTodo : IReturnVoid
{
    public int Id { get; set; }
}

Ajax呼び出しにX-Http-Method-OverrideHTTPRequestヘッダーを追加するか、FormDataまたはQueryStringのフィールドとして追加することで、AjaxまたはjQueryでDELETEリクエストをシミュレートできます。

POST /todo/1
X-Http-Method-Override=DELETE 

または、次のようにHTMLFormDataに埋め込まれます。

<form action="/todo/1" method="POST">
   <input type="hidden" name="X-Http-Method-Override" value="DELETE"/>
</form>

コントラクトのようにGETを介したDELETEを許可しないことが重要ですが、GETには副作用がないため、プロキシなどのHTTPミドルウェアでキャッシュおよび再生しても安全です。

于 2012-10-03T17:15:59.123 に答える
3

RESTガイドラインに従う場合は、GETまたはPOSTを使用してリソースを削除しないでください。

GET動詞は、リソースを読み取るために使用されます。重要な経験則は、GET操作は安全であるということです。つまり、リソースの状態を視覚的に変更することなく、繰り返し実行できます。このプロパティは、さまざまな理由で非常に重要です。まず、インデックス作成エンジンはGETを使用してリソースのコンテンツにインデックスを付けます。したがって、リソースのインデックス作成によっても変更された場合は問題になります。第2に、プロキシなどの仲介者は、GET操作の結果をキャッシュして、同じリソースへの後続のアクセスを高速化する場合があります。

PUT動詞とDELETE動詞を使用すると、リクエストでリソースの状態をアトミックに変更できます。

POST動詞には、さまざまな意味があります。これは、HTTP動詞のスイスアーミーナイフです。一部のリソースでは、内部状態を変更するために使用される場合があります。他の人にとっては、その振る舞いはリモートプロシージャコールの振る舞いかもしれません。

完全な説明については、そのページをご覧ください。

于 2012-10-03T16:24:08.163 に答える