Onde está a constante para os valores “HttpRequest.RequestType” e “WebRequest.Method” no .NET?

93

Preciso verificar o RequestTypede um HttpRequestno ASP.NET (ou WebRequest.Method). Eu sei que posso apenas usar os valores de string " POST" ou " GET" para o tipo de solicitação, mas poderia jurar que havia uma constante em alguma classe do .NET que continha os valores.

Por curiosidade, eu queria saber se alguém sabia em que classe essas constantes de string estavam GETe POSTestavam. Tentei pesquisar online, mas não tive sorte, então pensei em perguntar aqui.

Dan Herbert
fonte

Respostas:

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

Em última análise, embora; uma vez que as constexpressões são gravadas no chamador, isso é idêntico ao uso de "GET" etc, mas sem o risco de um erro de digitação.

Marc Gravell
fonte
22
Interessante, por que não existe o método DELETE e "*"?
kuncevic.dev
9
E está faltando OPÇÕES e TRACE.
Paul Kuykendall
7
PATCHverbo também está faltando.
RBT
46

Também existe o System.Net.Http.HttpMethodque pode servir em vez de enum. Você pode compará-los aMethod == HttpMethod.Get, etc. Para obter o nome do método de string, chame, por exemplo HttpMethod.Get.Method.

xmedeko
fonte
6
Tem a vantagem de funcionar também no Asp.Net Core
superjos
3
Só estou me perguntando por que eles não declararam esses campos como constantes em vez de campos somente leitura estáticos. A vantagem das constantes é que você pode passá-las como padrões de parâmetro (ou seja void Request(HttpMethod method = HttpMethod.Get)).
Shimmy Weitzhandler
1
@Shimmy A desvantagem das constantes é que elas são incorporadas ao assembly de referência em tempo de compilação por meio de substituição simples. Isso significa que se a montagem que define as constantes alterar seus valores e for substituída, quaisquer montagens de referência reterão os valores constantes originais, sem erros. A probabilidade de os métodos HTTP mudarem, no entanto, é outra história ...
Ian Kemp,
1
HttpMethod.Get.MethodNÃO é uma constante de tempo de compilação :( onde System.Net.WebRequestMethods.Httpestão as constantes
Piotr Kula
1
A necessidade de constantes de tempo de compilação é inevitável, independentemente de suas vantagens ou desvantagens. Por exemplo, parâmetros padrão em uma assinatura de método. Quando não posso usar System.Net.WebRequestMethods, geralmente trabalho em torno disso passando strings que HttpMethod pode usar em seu construtor. O problema é, obviamente, a documentação deles não diz explicitamente o que acontece quando um valor de string inválido
Jessica Pennell
17

Na ASP.NET MVC, eles estão em System.Web.Mvc.HttpVerbs . Mas todos os métodos que usam um desses valores enum também têm uma substituição de texto, pois não há um conjunto completo de verbos HTTP, apenas um conjunto de valores atualmente definidos (veja aqui e aqui e aqui ).

Você não pode criar uma enumeração que cubra todos os verbos, pois existe a possibilidade de que verbos possam ser adicionados e as enumerações têm problemas de versão que tornam isso impraticável.


fonte
5

No ASP.NET Core, você encontrará uma coleção de strings de método http na classe HttpMethods.cs no Microsoft.AspNetCore.Httpnamespace.

Esta classe também oferece auxiliares booleanos como IsGet()ouIsPost() para melhor semântica.

Observe que essas strings são expostas como public static readonly stringe não como constants.

B12Toaster
fonte