Де константа для значень “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
І в ньому відсутні ВАРІАНТИ і СЛІД.
Paul Kuykendall,

7
PATCHдієслово також відсутнє.
RBT

42

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


6
Це має перевагу також у роботі в Asp.Net Core
суперйос

2
Мені просто цікаво, чому вони не оголосили ці поля константами замість статичних полів лише для читання. Перевага констант полягає в тому, що ви можете передавати їх як параметри за замовчуванням (тобто void Request(HttpMethod method = HttpMethod.Get)).
Shimmy Weitzhandler

@Shimmy Недоліком констант є те, що вони вкладаються у збірку посилань під час компіляції за допомогою простої заміни. Це означає, що якщо збірка, що визначає константи, змінює свої значення та замінюється, будь-які збірки, що посилаються, зберігатимуть вихідні, не неправильні, постійні значення. Наскільки ймовірно, що методи HTTP коли-небудь змінюватимуться, це вже інша історія ...
Ян Кемп,

1
HttpMethod.Get.Method- це НЕ константа часу компіляції :( де System.Net.WebRequestMethods.Httpконстанти
Пьотр Кула

1
Потреби в константах часу компіляції не уникнути, незалежно від їх переваг або недоліків. Наприклад, параметри за замовчуванням у підписі методу. Коли я не можу використовувати System.Net.WebRequestMethods, я зазвичай обходжу це, передаючи рядки, які HttpMethod може використовувати у своєму конструкторі. Проблема полягає, звичайно, в їхній документації явно не сказано, що відбувається, коли передається неправильне значення рядка, тому використовуйте цю стратегію на свій страх і ризик, docs.microsoft.com/en-us/dotnet/api/…
Джессіка Пеннелл

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.