質問
これら3ルートは同じですか?どちらが通常好ましいですか?
[Route("/todo/{id}", "DELETE")]
[Route("/todo/delete","POST")]
[Route("/todo/delete/{id}","GET")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
.
ありがとうございました...
解決
優先ルートは実際にはPATHINFOでId
を含めることは、削除要求にhttpリクエストボディを持っていません。
[Route("/todo/{id}", "DELETE")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
.
実用的な理由で、ブラウザのデフォルト(および一部のプロキシ)は削除要求の送信を許可しないため、 post を削除を行うことをお勧めします。
[Route("/todo/{id}/delete", "POST")]
public class DeleteTodo : IReturnVoid
{
public int Id { get; set; }
}
.
Ajax呼び出し内の x-http-method-override HTTPリクエストヘッダまたはフィールドとして追加することで、AjaxまたはjQueryで削除要求をシミュレートできます。FormDataまたはQueryString、例えば
POST /todo/1
X-Http-Method-Override=DELETE
.
またはHTML FormDataに埋め込まれた:
<form action="/todo/1" method="POST">
<input type="hidden" name="X-Http-Method-Override" value="DELETE"/>
</form>
.
契約によるDELETEのビアの取得を許可しないことは重要ですが、GETの副作用はありませんので安全なので、CHCHEDやプロキシなどのHTTPミドルウェアによって再生されます。
他のヒント
RESTガイドラインに従う場合は、getまたはpostを使用してリソースを削除しないでください。
GET動詞はリソースを読み取るために使用されます。重要な経験則 取得操作が安全であるということです。つまり、繰り返し行うことができます リソースの状態を視覚的に変えることなく。この物件はです さまざまな理由で非常に重要です。まず、インデックス付けエンジンを使用します リソースの内容を索引付けするには。それでは、Aを索引付けした場合、それは悪いでしょう リソースも変更しました。第二に、プロキシのような仲介者、 後続のアクセスを高速化するためのGET操作の結果をキャッシュすることがあります。 同じリソースに。
PUTおよびDELETE VERBを使用すると、aの状態を変更するための要求が許可されます。 原子的に資源的に。
郵便動詞はさまざまな意味を持つことができます。それはスイス軍です HTTP動詞のナイフ。いくつかのリソースでは、それを変更するために使用されるかもしれません 内部状態他の人のために、その行動はリモートのそれになるかもしれません 手続き呼び出し。
は、そのページを完全に説明しています。