2

アプリケーションの起動時に、クライアントがサポートしていない動詞と動詞を検出し、POST動詞を自動的にオーバーロードするにはどうすればよいDELETEですPUTか?
サーバー側で、これらのオーバーロードされたPOST動詞を適切なアクションにリダイレクトするにはどうすればよいですか?
オーバーライドされたDELETEリクエストがあるとしましょう。アクションに一致するコントローラーで適切な関数を呼び出すにはどうすればよいですか?
私の推測では、アクションフィルターを使用し、リフレクションを使用して、関数に一致する属性を検査する必要があります(この例では:) DeleteFoo(Guid Id)

4

1 に答える 1

5

クライアントがこれらの動詞をサポートしているかどうかを検出することはできません。PUTまた、htmlフォームでDELETE動詞をサポートしていないブラウザーの場合は、フォーム内でHttpMethodOverrideヘルパーを使用できます。これにより、フォームに非表示のフィールドが追加され、POSTリクエストがカバーされているにもかかわらず、ランタイムに適切なコントローラーアクションを呼び出すように指示されます。送信されます。

<% using (Html.BeginForm("Destroy", "Products", new { id = "123" }, FormMethod.Post)) { %>
    <%: Html.HttpMethodOverride(HttpVerbs.Delete) %>
    <input type="submit" value="Delete" />
<% } %>

これは、で装飾されたアクションを呼び出します[HttpDelete]

[HttpDelete]
public ActionResult Destroy(int id)
{
    // TODO: delete product
    TempData["message"] = "product deleted";
    return RedirectToAction("index");    
}

ここで重要なことは、コントローラーがクライアントがサポートする動詞を気にしたり依存したりしてはならないということです。適切な動詞と名前を使用してRESTfulな方法でコントローラーを設計する場合、ここに示すような手法があり、サポートしていないクライアントPUTDELETE動詞が引き続きこれらのアクションを呼び出すことができます。

于 2010-10-10T15:59:17.497 に答える