¿Dónde está la constante para los valores "HttpRequest.RequestType" y "WebRequest.Method" en .NET?

92

Necesito verificar el RequestTypede un HttpRequesten ASP.NET (o WebRequest.Method). Sé que puedo usar los valores de cadena " POST" o " GET" para el tipo de solicitud, pero podría haber jurado que había una constante en algún lugar de alguna clase en .NET que contenía los valores.

Por curiosidad me preguntaba si alguien sabía qué clase de estas constantes de cadena de GETy POSTfuera. He intentado buscar en línea, pero no he tenido suerte, así que pensé en preguntar aquí.

Dan Herbert
fuente

Respuestas:

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

Sin embargo, en última instancia; dado que las constexpresiones se graban en el llamador, esto es idéntico a usar "GET", etc., pero sin el riesgo de un error tipográfico.

Marc Gravell
fuente
22
Interesante, ¿por qué no hay un método DELETE y "*"?
kuncevic.dev
9
Y le faltan OPTIONS y TRACE.
Paul Kuykendall
7
PATCHtambién falta el verbo.
RBT
42

También existe System.Net.Http.HttpMethodque puede servir en lugar de enum. Puede compararlos aMethod == HttpMethod.Get, etc. Para obtener el nombre del método de cadena, llame por ejemplo HttpMethod.Get.Method.

xmedeko
fuente
6
Esto tiene la ventaja de funcionar también en Asp.Net Core
superjos
2
Me pregunto por qué no han declarado esos campos como constantes en lugar de campos estáticos de solo lectura. La ventaja de las constantes es que puede pasarlas como parámetros predeterminados (es decir void Request(HttpMethod method = HttpMethod.Get)).
Shimmy Weitzhandler
@Shimmy La desventaja de las constantes es que están integradas en el ensamblado de referencia en tiempo de compilación mediante una simple sustitución. Eso significa que si el ensamblado que define las constantes cambia sus valores y se reemplaza, cualquier ensamblado de referencia conservará los valores constantes originales, sin errores. Sin embargo, qué tan probable es que los métodos HTTP cambien alguna vez es otra historia ...
Ian Kemp
1
HttpMethod.Get.MethodNO es una constante de tiempo de compilación :( donde System.Net.WebRequestMethods.Httpestán las constantes
Piotr Kula
1
La necesidad de compilar constantes de tiempo es inevitable independientemente de sus ventajas o desventajas. Por ejemplo, parámetros predeterminados en una firma de método. Cuando no puedo usar System.Net.WebRequestMethods, generalmente soluciono esto pasando cadenas que HttpMethod puede usar en su constructor. El problema es, por supuesto, que su documentación no dice explícitamente qué sucede cuando se pasa un valor de cadena incorrecto, así que use esta estrategia bajo su propio riesgo, docs.microsoft.com/en-us/dotnet/api/…
Jessica Pennell
17

En ASP.NET MVC están en System.Web.Mvc.HttpVerbs . Pero todos los métodos que toman uno de estos valores de enumeración también tienen una anulación de texto, ya que no hay un conjunto completo de verbos HTTP, solo un conjunto de valores definidos actualmente (ver aquí y aquí y aquí ).

No puede crear una enumeración que cubra todos los verbos, ya que existe la posibilidad de que se puedan agregar verbos y las enumeraciones tienen problemas de versiones que hacen que esto no sea práctico.


fuente
5

En ASP.NET Core , encontrará una colección de cadenas de métodos http en la clase HttpMethods.cs en el Microsoft.AspNetCore.Httpespacio de nombres.

Esta clase también ofrece ayudantes booleanos como IsGet()o IsPost()para una mejor semántica.

Tenga en cuenta que estas cadenas están expuestas como public static readonly stringy no como constants.

B12 Tostadora
fuente