Domanda

RFC 2616 HTTP / 1.1 definizione che le seguenti comuni esistono metodi HTTP:

GET, HEAD, POST, PUT, DELETE, traccia, OPZIONI, CONNECT

Ma la System.Web.Mvc.HttpVerbs enum è mancante TRACE, OPZIONI e CONNECT.

Ho un filtro azione che raccoglie il HttpVerb dalla richiesta, al fine di prendere certe decisioni (ad esempio, se una richiesta è PUT'ing un modello di tipo base A, quindi ho impostato alcuni dati), in modo da questo codice utility sta gettando un ArgumentOutOfRangeException per le richieste degli ultimi tre (per lo più OPZIONI - sembra che sta venendo da 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");
    }
}

Non sai come ottenere intorno a questo - tutte le idee?

L'unica cosa che mi viene in mente è cambiare tutto il codice di riferimento per verificare il metodo HTTP grezzo, poi solo chiamare l'utilità se non è TRACE, opzioni o CONNECT. Che è un pò hacky.

Perché è manca dalla classe enum? C'è una ragione specifica per questo? Non può MVC semplicemente gestire le richieste di questi tipi?

Con i suoni del metodo OPTIONS, non dovrebbe anche arrivare a MVC, e dovrebbe essere gestito da IIS per sé?

È stato utile?

Soluzione

finito per creare il mio enum e l'utilizzo di questo.

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

MVC sembra ancora gestire le richieste di opzioni di tipo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top