【问题标题】:Where is the constant for "HttpRequest.RequestType" and "WebRequest.Method" values in .NET?.NET 中“HttpRequest.RequestType”和“WebRequest.Method”值的常量在哪里?
【发布时间】:2008-11-10 13:48:09
【问题描述】:

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

出于好奇,我想知道是否有人知道GETPOST 的这些字符串常量属于哪个类。我尝试过在线搜索,但没有运气,所以我想我会在这里问.

【问题讨论】:

    标签: c# .net asp.net


    【解决方案1】:
    System.Net.WebRequestMethods.Http
        .Connect = "CONNECT"
        .Get = "GET"
        .Head = "HEAD"
        .MkCol = "MKCOL"
        .Post = "POST"
        .Put = "PUT"
    

    不过,最终;由于const 表达式被写入调用者,这与使用“GET”等相同,只是没有拼写错误的风险。

    【讨论】:

    • 有意思,为什么没有DELETE方法和“*”?
    • 而且它缺少 OPTIONS 和 TRACE。
    • PATCH 动词也不见了。
    【解决方案2】:

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

    【讨论】:

    • 这对 Asp.Net Core 也有好处
    • 我只是想知道为什么他们没有将这些字段声明为常量而不是静态只读字段。常量的优点是您可以将它们作为参数默认值传递(即void Request(HttpMethod method = HttpMethod.Get))。
    • @Shimmy 常量的缺点是它们在编译时通过简单的替换被烘焙到引用程序集中。这意味着如果定义常量的程序集更改了它们的值并被替换,任何引用程序集都将保留原始的、没有错误的常量值。然而,HTTP 方法改变的可能性有多大,那就是另外一回事了……
    • HttpMethod.Get.Method 不是编译时常量 :( 其中System.Net.WebRequestMethods.Http 是常量
    • 编译时常量的需求是不可避免的,不管它们的优点或缺点。例如,方法签名中的默认参数。当我不能使用 System.Net.WebRequestMethods 时,我通常通过传递 HttpMethod 可以在其构造函数中使用的字符串来解决这个问题。问题是,当然,他们的文档没有明确说明传入错误字符串值时会发生什么,因此使用此策略需要您自担风险,docs.microsoft.com/en-us/dotnet/api/…
    【解决方案3】:

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

    您不能创建一个涵盖所有动词的枚举,因为有可能添加动词,而enumerations have versioning issues 使这不切实际。

    【讨论】:

      【解决方案4】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2011-02-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-12
        • 2021-06-09
        • 2017-04-26
        • 1970-01-01
        • 2011-02-15
        相关资源
        最近更新 更多