質問

これら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動詞のナイフ。いくつかのリソースでは、それを変更するために使用されるかもしれません 内部状態他の人のために、その行動はリモートのそれになるかもしれません 手続き呼び出し。

は、そのページを完全に説明しています。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top