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

Dan*_*ert 82 .net c# asp.net

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

出于好奇,我想知道是否有人知道这些字符串常量是哪一个阶级GETPOST人.我已经试过在网上搜索,但我没有运气,所以我认为我会问这里.

Mar*_*ell 109

System.Net.WebRequestMethods.Http
    .Connect = "CONNECT"
    .Get = "GET"
    .Head = "HEAD"
    .MkCol = "MKCOL"
    .Post = "POST"
    .Put = "PUT"
Run Code Online (Sandbox Code Playgroud)

但最终; 因为const表达式被烧入调用者,这与使用"GET"等相同,只是没有拼写错误的风险.

  • 有意思,为什么没有DELETE方法和"*"? (18认同)
  • 它缺少OPTIONS和TRACE. (7认同)
  • `PATCH`动词也不见了. (5认同)

xme*_*eko 38

也存在System.Net.Http.HttpMethod可以代替枚举.您可以比较它们aMethod == HttpMethod.Get等.要获取字符串方法名称,例如HttpMethod.Get.Method.

  • 这也有利于在Asp.Net Core中工作 (5认同)
  • 我只是想知道为什么他们没有将这些字段声明为常量而不是静态只读字段.常量的优点是你可以将它们作为参数默认值传递(即`void Request(HttpMethod method = HttpMethod.Get)`). (2认同)

小智 15

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

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


B12*_*ter 8

ASP.NET Core 中,您将在命名空间下的HttpMethods.cs类中找到一组 http 方法字符串Microsoft.AspNetCore.Http

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

请注意,这些字符串公开为 ,public static readonly string而不是constants

2020 GetCanonicalizedValue(string method)HttpMethods.cs5 月 17 日更新:已添加到ASP.NET Core v5 中的类中,该类返回与提供的字符串方法名称等效的静态实例。