Wo ist die Konstante für die Werte "HttpRequest.RequestType" und "WebRequest.Method" in .NET?

92

Ich muss das RequestTypevon einem HttpRequestin ASP.NET (oder WebRequest.Method) überprüfen . Ich weiß, dass ich nur die Zeichenfolgenwerte " POST" oder " GET" für den Anforderungstyp verwenden kann, aber ich hätte schwören können, dass irgendwo in einer Klasse in .NET eine Konstante vorhanden ist, die die Werte enthält.

Aus Neugier fragte ich mich, ob jemand wusste, für welche Klasse sich diese String-Konstanten befanden GETund POSTin welcher Klasse sie sich befanden. Ich habe versucht, online zu suchen, aber ich hatte kein Glück, also dachte ich, ich würde hier fragen.

Dan Herbert
quelle

Antworten:

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

Letztendlich aber; Da constAusdrücke in den Aufrufer eingebrannt werden, ist dies identisch mit der Verwendung von "GET" usw., nur ohne das Risiko eines Tippfehlers.

Marc Gravell
quelle
22
Interessant, warum gibt es keine DELETE-Methode und "*"?
Kuncevic.dev
9
Und es fehlen OPTIONEN und TRACE.
Paul Kuykendall
7
PATCHVerb fehlt auch.
RBT
42

Es gibt auch System.Net.Http.HttpMethodwelche, die anstelle von Enum dienen können. Sie können sie vergleichen aMethod == HttpMethod.Getusw. Um den Namen der Zeichenfolgenmethode zu erhalten, rufen Sie z HttpMethod.Get.Method.

xmedeko
quelle
5
Dies hat den Vorteil, auch in Asp.Net Core zu arbeiten
Superjos
2
Ich frage mich nur, warum sie diese Felder nicht als Konstanten anstatt als statische schreibgeschützte Felder deklariert haben. Der Vorteil von Konstanten besteht darin, dass Sie sie als Parameterstandards (dh void Request(HttpMethod method = HttpMethod.Get)) übergeben können.
Shimmy Weitzhandler
@Shimmy Der Nachteil von Konstanten besteht darin, dass sie zur Kompilierungszeit durch einfaches Ersetzen in die referenzierende Assembly eingebrannt werden. Das heißt, wenn die Assembly, die die Konstanten definiert, ihre Werte ändert und ersetzt wird, behalten alle referenzierenden Assemblys die ursprünglichen, keine falschen Konstantenwerte bei. Wie wahrscheinlich es ist, dass sich HTTP-Methoden jemals ändern werden, ist eine andere Geschichte ...
Ian Kemp
1
HttpMethod.Get.Methodist KEINE Kompilierungszeitkonstante :( wo System.Net.WebRequestMethods.Httpsind Konstanten
Piotr Kula
1
Die Notwendigkeit von Kompilierungszeitkonstanten ist unabhängig von ihren Vor- oder Nachteilen unvermeidbar. Zum Beispiel Standardparameter in einer Methodensignatur. Wenn ich System.Net.WebRequestMethods nicht verwenden kann, umgebe ich dies normalerweise, indem ich Zeichenfolgen übergebe, die HttpMethod in seinem Konstruktor verwenden kann. Das Problem ist natürlich, dass in der Dokumentation nicht explizit angegeben ist, was passiert, wenn ein falscher
Jessica Pennell
17

In ASP.NET MVC befinden sie sich in System.Web.Mvc.HttpVerbs . Alle Methoden, die einen dieser Enum-Werte annehmen, haben jedoch auch eine Textüberschreibung, da es keinen vollständigen Satz von HTTP-Verben gibt, sondern nur einen Satz aktuell definierter Werte (siehe hier und hier und hier ).

Sie können keine Aufzählung erstellen, die alle Verben abdeckt, da die Möglichkeit besteht, dass Verben hinzugefügt werden können und Aufzählungen Versionsprobleme aufweisen , die dies unpraktisch machen.


quelle
5

In ASP.NET Core finden Sie eine Sammlung von http-Methodenzeichenfolgen in der Klasse HttpMethods.cs unter dem Microsoft.AspNetCore.HttpNamespace.

Diese Klasse bietet auch boolesche Helfer wie IsGet()oder IsPost()für eine bessere Semantik.

Bitte beachten Sie, dass diese Zeichenfolgen als public static readonly stringund nicht als angezeigt werden constants.

B12Toaster
quelle