.NET中“ HttpRequest.RequestType”和“ WebRequest.Method”值的常量在哪里?


92

我需要检查RequestTypeHttpRequest在ASP.NET(或WebRequest.Method)。我知道我可以只将字符串值“ POST”或“ GET”用于请求类型,但是我可能发誓在.NET中某个类中的某个地方包含一个常量,这些常量包含这些值。

出于好奇,我想知道是否有人知道这些字符串常量用于什么类,GET并且POST在其中。我曾尝试在线搜索,但没有运气,所以我想在这里问。

Answers:


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

最终,尽管如此;由于const表达式已被烧录到调用方中,因此这与使用“ GET”等相同,只是没有输入错误的风险。


22
有趣的是,为什么没有DELETE方法和“ *”?
kuncevic.dev 2011年

9
而且它缺少OPTIONS和TRACE。
Paul Kuykendall 2012年

7
PATCH动词也丢失了。
RBT

42

也存在System.Net.Http.HttpMethod可以代替枚举的服务。您可以比较它们aMethod == HttpMethod.Get,等等。要获取字符串方法名称,请调用HttpMethod.Get.Method


6
这也具有在Asp.Net Core中工作的优势
superjos

2
我只是想知道为什么他们没有将这些字段声明为常量,而不是静态只读字段。常量的优点是您可以将它们作为参数默认值(即void Request(HttpMethod method = HttpMethod.Get))传递。
Shimmy Weitzhandler,

@Shimmy常量的缺点是,它们在编译时通过简单的替换被烘烤到引用程序集中。这意味着,如果定义常量的程序集更改了它们的值并被替换,则所有引用程序集都将保留原始的,没有错误的常量值。HTTP方法将发生多大可能的改变是另一回事……
Ian Kemp

1
HttpMethod.Get.Method不是编译时间常量:(其中System.Net.WebRequestMethods.Http常量
Piotr Kula

1
无论它们的优缺点,都不可避免地需要编译时间常数。例如,方法签名中的默认参数。当我不能使用System.Net.WebRequestMethods时,我通常通过传递HttpMethod可以在其构造函数中使用的字符串来解决此问题。问题是,当然,他们的文档没有明确说明传入错误的字符串值会发生什么,因此使用此策略需要您自担风险,docs.microsoft.com / en
Jessica Pennell

17

在ASP.NET MVC中,它们位于System.Web.Mvc.HttpVerbs中。但是,采用这些枚举值之一的所有方法也都具有文本覆盖,因为没有完整的HTTP动词集,只有一组当前定义的值(请参阅此处此处以及此处)。

您无法创建涵盖所有动词的枚举,因为可能会添加动词,并且枚举存在版本问题,因此不切实际。


5

ASP.NET Core中,您可以在名称空间下的HttpMethods.cs类中找到http方法字符串的集合Microsoft.AspNetCore.Http

此类还提供布尔帮助器,例如IsGet()IsPost()以获得更好的语义。

请注意,这些字符串以public static readonly string和不以公开constants

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.