Question

Le RFC 2616 de HTTP / 1.1 définition des états que la commune suivante méthodes HTTP existent:

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

System.Web.Mvc.HttpVerbs ENUM est manquante TRACE, OPTIONS eT CONNECT.

J'ai un filtre d'action qui reprend la HttpVerb de la demande afin de prendre certaines décisions (par exemple, si une demande est PUT'ing un modèle de type de base A, alors je définirait des données), de sorte ce code utilitaire est de lancer une ArgumentOutOfRangeException pour les demandes des trois dernières (la plupart OPTIONS - on dirait qu'il vient 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");
    }
}

Je ne sais pas comment contourner ce - des idées?

La seule chose que je peux penser est de changer tout le code de référence pour vérifier la méthode HTTP brute, puis seulement appeler l'utilitaire si ce n'est pas TRACE, OPTIONS ou CONNECT. Ce qui est un peu hacky.

Pourquoi est-il absent de la classe ENUM? Y at-il une raison spécifique pour elle? Peut MVC tout simplement pas traiter les demandes de ces types?

Par les sons de la méthode OPTIONS, il ne devrait même pas se rendre à MVC, et il doit être manipulé par les services Internet lui-même?

Était-ce utile?

La solution

a fini par créer mon propre ENUM et en utilisant cela.

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

MVC semble encore aux demandes de poignée d'options de type.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top