Où se trouve la constante des valeurs «HttpRequest.RequestType» et «WebRequest.Method» dans .NET?

92

J'ai besoin de vérifier le RequestTyped'un HttpRequestdans ASP.NET (ou WebRequest.Method). Je sais que je peux simplement utiliser les valeurs de chaîne " POST" ou " GET" pour le type de requête, mais j'aurais juré qu'il y avait une constante quelque part dans une classe de .NET qui contenait les valeurs.

Par curiosité , je me demandais si quelqu'un savait quelle classe ces constantes de chaîne GETet POSTont été. Je l' ai essayé la recherche en ligne , mais je l' ai pas eu de chance, donc je pensais que je demande ici.

Dan Herbert
la source

Réponses:

121
System.Net.WebRequestMethods.Http
    .Connect = "CONNECT"
    .Get = "GET"
    .Head = "HEAD"
    .MkCol = "MKCOL"
    .Post = "POST"
    .Put = "PUT"

En fin de compte, cependant; puisque les constexpressions sont gravées dans l'appelant, cela revient à utiliser "GET", etc., sans risque de faute de frappe.

Marc Gravell
la source
22
Intéressant, pourquoi il n'y a pas de méthode DELETE et "*"?
kuncevic.dev
9
Et il manque OPTIONS et TRACE.
Paul Kuykendall
7
PATCHle verbe est également manquant.
RBT
42

Existe également System.Net.Http.HttpMethodqui peut servir à la place d'énumération. Vous pouvez les comparer aMethod == HttpMethod.Get, etc. Pour obtenir un nom de méthode de chaîne, appelez par exemple HttpMethod.Get.Method.

xmedeko
la source
6
Cela a l'avantage de fonctionner également dans Asp.Net Core
superjos
2
Je me demande simplement pourquoi ils n'ont pas déclaré ces champs en tant que constantes au lieu de champs statiques en lecture seule. L'avantage des constantes est que vous pouvez les passer comme paramètres par défaut (ie void Request(HttpMethod method = HttpMethod.Get)).
Shimmy Weitzhandler
@Shimmy L'inconvénient des constantes est qu'elles sont intégrées à l'assemblage de référence au moment de la compilation via une simple substitution. Cela signifie que si l'assembly qui définit les constantes modifie leurs valeurs et est remplacé, tous les assemblys de référence conserveront les valeurs constantes d'origine, pas erronées. Quelle est la probabilité que les méthodes HTTP changent un jour, cependant, est une autre histoire ...
Ian Kemp
1
HttpMethod.Get.Methodn'est PAS une constante de temps de compilation: (où System.Net.WebRequestMethods.Httpsont les constantes
Piotr Kula
1
Le besoin de constantes de temps de compilation est inévitable quels que soient leurs avantages ou inconvénients. Par exemple, les paramètres par défaut dans une signature de méthode. Lorsque je ne peux pas utiliser System.Net.WebRequestMethods, je contourne généralement ce problème en passant des chaînes que HttpMethod peut utiliser dans son constructeur. Le problème est, bien sûr, que leur documentation ne dit pas explicitement ce qui se passe lorsqu'une valeur de chaîne incorrecte est transmise, alors utilisez cette stratégie à vos risques et périls, docs.microsoft.com/en-us/dotnet/api/…
Jessica Pennell
17

Dans ASP.NET MVC, ils sont dans System.Web.Mvc.HttpVerbs . Mais toutes les méthodes qui prennent l'une de ces valeurs d'énumération ont également un remplacement de texte, car il n'y a pas d'ensemble complet de verbes HTTP, seulement un ensemble de valeurs actuellement définies (voir ici et ici et ici ).

Vous ne pouvez pas créer une énumération qui couvre tous les verbes, car il est possible que des verbes puissent être ajoutés, et les énumérations ont des problèmes de version qui rendent cela impossible.


la source
5

Dans ASP.NET Core, vous trouverez une collection de chaînes de méthode http dans la classe HttpMethods.cs sous l' Microsoft.AspNetCore.Httpespace de noms.

Cette classe propose également des aides booléennes telles que IsGet()ou IsPost()pour une meilleure sémantique.

Veuillez noter que ces chaînes sont exposées comme public static readonly stringet non comme constants.

B12Toaster
la source