Где находится константа для значений «HttpRequest.RequestType» и «WebRequest.Method» в .NET?

92

Мне нужно , чтобы проверить RequestTypeиз HttpRequestв ASP.NET (или WebRequest.Method). Я знаю, что могу просто использовать строковые значения " POST" или " GET" для типа запроса, но я мог бы поклясться, что где-то в каком-то классе .NET есть константа, содержащая значения.

Из любопытства мне было интересно, знает ли кто-нибудь, для какого класса эти строковые константы GETи POSTпринадлежат. Я пробовал искать в Интернете, но мне не повезло, поэтому я решил спросить здесь.

Дэн Герберт
источник

Ответы:

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

В конечном счете, однако; поскольку constвыражения записываются в вызывающую программу, это идентично использованию «GET» и т. д., только без риска опечатки.

Марк Гравелл
источник
22
Интересно, а почему нет метода DELETE и "*"?
kuncevic.dev
9
И не хватает OPTIONS и TRACE.
Paul Kuykendall
7
PATCHглагол тоже отсутствует.
RBT
42

Также существует, System.Net.Http.HttpMethodкоторый может служить вместо enum. Вы можете сравнить их aMethod == HttpMethod.Getи т. Д. Чтобы получить строковое имя метода, вызовите, например HttpMethod.Get.Method.

xmedeko
источник
6
Это имеет то преимущество, что работает и в Asp.Net Core
superjos
2
Мне просто интересно, почему они не объявили эти поля как константы вместо статических полей только для чтения. Преимущество констант в том, что вы можете передавать их как значения параметров по умолчанию (т.е. void Request(HttpMethod method = HttpMethod.Get)).
Шимми Вайцхандлер
@Shimmy Недостатком констант является то, что они запекаются в ссылающейся сборке во время компиляции с помощью простой замены. Это означает, что если сборка, определяющая константы, изменяет свои значения и заменяется, все ссылающиеся сборки сохранят исходные, без неправильных, постоянные значения. Однако насколько вероятно, что методы HTTP когда-либо изменятся - это уже другая история ...
Ян Кемп
1
HttpMethod.Get.MethodНЕ является постоянной времени компиляции :( где System.Net.WebRequestMethods.Httpконстанты
Петр Кула
1
Потребность в константах времени компиляции неизбежна, независимо от их преимуществ или недостатков. Например, параметры по умолчанию в сигнатуре метода. Когда я не могу использовать System.Net.WebRequestMethods, я обычно обхожу это, передавая строки, которые HttpMethod может использовать в своем конструкторе. Проблема, конечно, в том, что в их документации явно не говорится, что происходит, когда передается неверное
Джессика Pennell
17

В ASP.NET MVC они находятся в System.Web.Mvc.HttpVerbs . Но все методы , которые принимают один из этих значений перечислений также имеют текстовое переопределение, так как не существует полного набора HTTP глаголов, только набор определённых значений (см здесь и здесь и здесь ).

Вы не можете создать перечисление, которое охватывает все глаголы, так как есть вероятность, что глаголы могут быть добавлены, а в перечислениях есть проблемы с версией, которые делают это непрактичным.


источник
5

В ASP.NET Core вы найдете коллекцию строк метода http в классе HttpMethods.cs в Microsoft.AspNetCore.Httpпространстве имен.

Этот класс также предлагает логические помощники, такие как IsGet()илиIsPost() для лучшей семантики.

Обратите внимание, что эти строки отображаются как, public static readonly stringа не как constants.

B12Toaster
источник