0

RFC 2616 HTTP/1.1 定義では、次の一般的な HTTP メソッドが存在すると述べています。

GET、HEAD、POST、PUT、DELETE、TRACE、OPTIONS、CONNECT

しかし、System.Web.Mvc.HttpVerbs列挙型には TRACE、OPTIONS、および CONNECT がありません。

特定の決定を下すためにリクエストから HttpVerb を取得するアクション フィルターがあるので (たとえば、リクエストがベース タイプ A のモデルを PUT している場合、データを設定します)、このユーティリティ コードは次のようになります。最後の 3 つのリクエストに対して ArgumentOutOfRangeException をスローしています (ほとんどが OPTIONS - Google 翻訳から来ているようです):

public static HttpVerbs GetHttpVerb(this HttpRequestBase httpRequestBase)
{
    switch (httpRequestBase.HttpMethod)
    {
        case "GET":
            return HttpVerbs.Get;
        case "POST":
            return HttpVerbs.Post;
        case "PUT":
            return HttpVerbs.Put;
        case "DELETE":
            return HttpVerbs.Delete;
        case "HEAD":
            return HttpVerbs.Head;    
        default:
            throw new ArgumentOutOfRangeException("httpRequestBase");
    }
}

これを回避する方法がわからない - 何かアイデアはありますか?

私が考えることができる唯一のことは、最初に生のHTTPメソッドをチェックするようにすべての参照コードを変更し、次にTRACE、OPTIONS、またはCONNECTでない場合にのみユーティリティを呼び出すことです。これはちょっとハックです。

enum クラスにないのはなぜですか? それには具体的な理由がありますか?MVC は単にこれらのタイプのリクエストを処理できないのでしょうか?

OPTIONS メソッドの音からすれば、MVC に到達することさえできず、IIS 自体で処理する必要がありますか?

4

1 に答える 1

0

自分の列挙型を作成してそれを使用することになりました。

public enum HttpVerb
{
    Get,
    Head,
    Post,
    Put,
    Delete,
    Trace,
    Options,
    Connect
}

MVCはまだOPTIONSタイプのリクエストを処理しているようです。

于 2012-02-20T05:37:22.643 に答える