Pregunta

los RFC 2616 HTTP/1.1 Definición establece que existen los siguientes métodos HTTP comunes:

Obtener, dirigir, publicar, poner, eliminar, rastrear, opciones, conectarse

Pero el System.web.mvc.httpverbs Falta Trace, Opciones y Connection a Enum.

Tengo un filtro de acción que recoge el httpverb de la solicitud para tomar ciertas decisiones (por ejemplo, si una solicitud está poniendo un modelo de tipo base A, entonces configuré algunos datos), por lo que este código de utilidad está lanzando un argumentougoOfRangeException para las solicitudes de las últimas tres (en su mayoría opciones, parece que proviene de 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");
    }
}

No estoy seguro de cómo evitar esto, ¿alguna idea?

Lo único que se me ocurre es cambiar todo el código de referencia para verificar primero el método HTTP sin procesar, entonces solo llame a la utilidad si no se trata de trazar, opciones o conectar. Que es un poco hacky.

¿Por qué falta en la clase enum? ¿Hay alguna razón específica para ello? ¿MVC simplemente puede no manejar solicitudes de estos tipos?

Por los sonidos del método de opciones, ¿ni siquiera debería llegar a MVC, y debería ser manejado por IIS?

¿Fue útil?

Solución

Terminó creando mi propio enum y usando eso.

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

MVC todavía parece manejar solicitudes de opciones de tipo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top