Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 其中是“的常数”;HttpRequest.RequestType“;及;WebRequest.Method“;NET中的值?_C#_.net_Asp.net - Fatal编程技术网

C# 其中是“的常数”;HttpRequest.RequestType“;及;WebRequest.Method“;NET中的值?

C# 其中是“的常数”;HttpRequest.RequestType“;及;WebRequest.Method“;NET中的值?,c#,.net,asp.net,C#,.net,Asp.net,我需要检查ASP.NET中HttpRequest的RequestType(或WebRequest.Method)。我知道我可以使用字符串值“POST”或“GET”作为请求类型,但我可以发誓在.NET中的某个类的某个地方有一个包含这些值的常量 出于好奇,我想知道是否有人知道GET和POST的字符串常量属于哪一类。我试过在网上搜索,但运气不好,所以我想在这里问一下 System.Net.WebRequestMethods.Http .Connect = "CONNECT" .Get

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

出于好奇,我想知道是否有人知道
GET
POST
的字符串常量属于哪一类。我试过在网上搜索,但运气不好,所以我想在这里问一下

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

不过,最终;由于
const
表达式被烧录到调用者中,这与使用“GET”等相同,只是没有打字的风险。

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


您无法创建涵盖所有动词的枚举,因为可能会添加动词,这使得此操作不切实际。

也存在可以代替枚举的枚举。您可以比较它们
aMethod==HttpMethod.Get
等以获取字符串方法名称调用,例如
HttpMethod.Get.method

ASP.NET Core中,您将在
Microsoft.AspNetCore.http
命名空间下的类中找到http方法字符串的集合

此类还提供了布尔帮助程序,如
IsGet()
IsPost()
,以获得更好的语义

请注意,这些字符串公开为
公共静态只读字符串
,而不是
常量


更新2020-05-17:
GetCanonicalizedValue(string方法)
被添加到ASP.NET Core v5中的
HttpMethods.cs
类中,该类返回与提供的string方法名称等效的静态实例。

有趣的是,为什么没有DELETE方法和“*”?并且它缺少选项和跟踪。
补丁
动词也缺少。这对于在Asp.Net Core中工作也有好处。我只是想知道为什么他们没有将这些字段声明为常量而不是静态只读字段。常量的优点是可以作为参数默认值传递它们(即
void请求(HttpMethod=HttpMethod.Get)
)。@Shimmy常量的缺点是它们在编译时通过简单的替换被烘焙到引用程序集中。这意味着,如果定义常量的程序集更改其值并被替换,则任何引用程序集都将保留原始的、无错误的常量值。然而,HTTP方法改变的可能性是另一回事…
HttpMethod.Get.Method
不是编译时常量:(当
System.Net.WebRequestMethods.Http
是常量时,无论其优点或缺点如何,对编译时常量的需求都是不可避免的。例如,方法签名中的默认参数。当我不能使用System.Net.WebRequestMethods时,我通常通过传递字符串HttpMethod可以在其构造中使用来解决这个问题当然,问题是,他们的文档没有明确说明传入错误字符串值时会发生什么,所以使用此策略的风险由您自己承担,