Определение *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?