Gdzie jest stała wartości „HttpRequest.RequestType” i „WebRequest.Method” w .NET?

92

Muszę sprawdzić RequestTypez HttpRequestw ASP.NET (lub WebRequest.Method). Wiem, że mogę po prostu użyć wartości ciągu „ POST” lub „ GET” dla typu żądania, ale mógłbym przysiąc, że gdzieś w jakiejś klasie w .NET istnieje stała, która zawierała wartości.

Z ciekawości Zastanawiałem się, czy ktoś wie, co klasa te stałe łańcuchowe dla GETi POSTbyły w. Próbowałem szukają w internecie, ale nie miałem szczęścia, więc pomyślałem, że pytam tutaj.

Dan Herbert
źródło

Odpowiedzi:

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

Ostatecznie jednak; ponieważ constwyrażenia są wypalane w wywołującym, jest to identyczne z użyciem „GET” itp., tylko bez ryzyka literówki.

Marc Gravell
źródło
22
Ciekawe, dlaczego nie ma metody DELETE i „*”?
kuncevic.dev
9
Brakuje OPCJI i ŚLEDZENIA.
Paul Kuykendall
7
PATCHbrakuje również czasownika.
RBT
42

Istnieje również, System.Net.Http.HttpMethodktóry może służyć zamiast enum. Możesz je porównać aMethod == HttpMethod.Get, itp. Aby otrzymać string nazwę metody wywołaj np HttpMethod.Get.Method.

xmedeko
źródło
6
Ma to tę zaletę, że działa również w Asp.Net Core
superjos
2
Zastanawiam się tylko, dlaczego nie zadeklarowali tych pól jako stałe zamiast statycznych pól tylko do odczytu. Zaletą stałych jest to, że można je przekazać jako wartości domyślne parametrów (tj void Request(HttpMethod method = HttpMethod.Get).).
Shimmy Weitzhandler
@Shimmy Wadą stałych jest to, że są one umieszczane w zestawie odniesienia w czasie kompilacji poprzez proste podstawianie. Oznacza to, że jeśli zespół, który definiuje stałe, zmieni ich wartości i zostanie zastąpiony, wszystkie zespoły odwołujące się zachowają oryginalne, bez błędnych, stałych wartości. Jak prawdopodobne jest, że metody HTTP kiedykolwiek się zmienią, to inna historia ...
Ian Kemp
1
HttpMethod.Get.MethodNIE jest stałą czasową kompilacji :( gdzie System.Net.WebRequestMethods.Httpsą stałe
Piotr Kula
1
Potrzeba stałych czasu kompilacji jest nieunikniona niezależnie od ich zalet lub wad. Na przykład domyślne parametry w sygnaturze metody. Kiedy nie mogę użyć System.Net.WebRequestMethods, zwykle omijam to, przekazując ciągi znaków, których HttpMethod może użyć w swoim konstruktorze. Problem polega oczywiście na tym, że ich dokumentacja nie określa wyraźnie, co się dzieje, gdy przekazywana jest zła wartość ciągu, więc użyj tej strategii na własne ryzyko, docs.microsoft.com/en-us/dotnet/api/ ...
Jessica Pennell
17

W ASP.NET MVC są w System.Web.Mvc.HttpVerbs . Ale wszystkie metody, które przyjmują jedną z tych wartości wyliczenia, mają również nadpisanie tekstu, ponieważ nie ma pełnego zestawu czasowników HTTP, a jedynie zestaw aktualnie zdefiniowanych wartości (patrz tutaj i tutaj i tutaj ).

Nie można utworzyć wyliczenia obejmującego wszystkie czasowniki, ponieważ istnieje możliwość dodawania czasowników, a wyliczenia mają problemy z wersjonowaniem, które sprawiają, że jest to niepraktyczne.


źródło
5

W ASP.NET Core znajdziesz kolekcję ciągów metod http w klasie HttpMethods.cs w obszarze Microsoft.AspNetCore.Httpnazw.

Ta klasa oferuje również pomocniki logiczne, takie jak IsGet()lub IsPost()dla lepszej semantyki.

Należy pamiętać, że te ciągi są widoczne jako, public static readonly stringa nie jako constants.

B12Toaster
źródło