Где находится константа для значений «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.


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.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.