Почему в классе System.Web.Mvc.HttpVerbs отсутствуют TRACE, CONNECT & OPTIONS? - PullRequest
0 голосов
/ 17 февраля 2012

Определение *1001* RFC 2616 гласит, что существуют следующие распространенные методы HTTP:

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

Но в перечислении System.Web.Mvc.HttpVerbs отсутствует TRACE, OPTIONS & CONNECT.

У меня есть фильтр действий, который выбирает HttpVerb из запроса для принятия определенных решений (например, если запрос помещает модель базового типа A, тогда я устанавливаю некоторые данные), поэтому эта служебная программа генерирует исключение ArgumentOutOfRangeException для запросов трех последних (в основном, ОПЦИЙ - похоже, это из Google Translate):

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?

1 Ответ

0 голосов
/ 20 февраля 2012

Закончилось создание собственного перечисления и его использование.

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

MVC по-прежнему обрабатывает запросы типа OPTIONS.

...