Dov'è la costante per i valori "HttpRequest.RequestType" e "WebRequest.Method" in .NET?


92

Ho bisogno di controllare il RequestTypedi un HttpRequestin ASP.NET (o WebRequest.Method). So che posso semplicemente usare i valori stringa " POST" o " GET" per il tipo di richiesta, ma avrei giurato che c'era una costante da qualche parte in qualche classe in .NET che conteneva i valori.

Per curiosità mi chiedevo se qualcuno sapeva che classe queste costanti di stringa per GETe POSTerano in. Ho provato a cercare online, ma non ho avuto fortuna, così ho pensato di chiedere qui.

Risposte:


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

Alla fine, però; poiché le constespressioni vengono masterizzate nel chiamante, ciò è identico all'utilizzo di "GET" ecc., solo senza il rischio di errori di battitura.


22
Interessante, perché non esiste il metodo DELETE e "*"?
kuncevic.dev

9
E mancano OPZIONI e TRACCIA.
Paul Kuykendall

7
PATCHmanca anche il verbo.
RBT

42

Esiste anche System.Net.Http.HttpMethodche può servire al posto di enum. Puoi confrontarli aMethod == HttpMethod.Get, ecc. Per ottenere il nome del metodo stringa, chiama ad es HttpMethod.Get.Method.


6
Questo ha il vantaggio di funzionare anche in Asp.Net Core
superjos

2
Mi chiedo solo perché non hanno dichiarato quei campi come costanti invece di campi di sola lettura statici. Il vantaggio delle costanti è che puoi passarle come parametri predefiniti (cioè void Request(HttpMethod method = HttpMethod.Get)).
Shimmy Weitzhandler

@Shimmy Lo svantaggio delle costanti è che vengono inserite nell'assembly di riferimento in fase di compilazione tramite una semplice sostituzione. Ciò significa che se l'assembly che definisce le costanti modifica i propri valori e viene sostituito, tutti gli assembly di riferimento manterranno i valori costanti originali, non errati. Quanto è probabile che i metodi HTTP cambieranno mai, tuttavia, è un'altra storia ...
Ian Kemp

1
HttpMethod.Get.MethodNON è una costante di tempo di compilazione :( dove System.Net.WebRequestMethods.Httpsono le costanti
Piotr Kula

1
La necessità di costanti del tempo di compilazione è inevitabile indipendentemente dai loro vantaggi o svantaggi. Ad esempio, parametri predefiniti in una firma del metodo. Quando non riesco a utilizzare System.Net.WebRequestMethods, di solito aggiro questo problema passando le stringhe che HttpMethod può utilizzare nel suo costruttore. Il problema è, ovviamente, che la loro documentazione non dice esplicitamente cosa succede quando viene passato un valore di stringa errato
Jessica Pennell

17

In ASP.NET MVC sono in System.Web.Mvc.HttpVerbs . Ma tutti i metodi che accettano uno di questi valori enum hanno anche una sovrascrittura del testo, poiché non esiste un set completo di verbi HTTP, solo un set di valori attualmente definiti (vedere qui e qui e qui ).

Non è possibile creare un'enumerazione che copra tutti i verbi, poiché esiste la possibilità che i verbi possano essere aggiunti e le enumerazioni presentano problemi di versione che lo rendono poco pratico.


5

In ASP.NET Core troverai una raccolta di stringhe di metodo http nella classe HttpMethods.cs sotto lo Microsoft.AspNetCore.Httpspazio dei nomi.

Questa classe offre anche helper booleani come IsGet()o IsPost()per una semantica migliore.

Si noti che queste stringhe sono esposte come public static readonly stringe non come constants.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.