在.NET Framework的Reference of HttpRequest.HttpMethod 中,使用System.String类型声明请求类型。

RFC 2616中声明了所有HTTP请求方法(例如POST,GET,PUT,DELETE ...)。

.NET的 HttpWebRequest WebRequest类中也存在类似的行为。

Java在 HttpURLConnection#setRequestMethod(String) 方法上有类似的方法。

这些语言设计者为什么不考虑为这些HTTP方法实现枚举?

你有好主意吗?

最佳答案

RFC 2616链接的第一句话(添加了重点):



也就是说,HTTP中的方法可以是任何东西。有“众所周知的”或常用方法,它们的语义很容易理解(很好,应该很好理解-我仍然遇到在GET / POST上不清楚的人)。

但是任何应用程序都可以实现其他方法。希望在客户端和服务器应用程序之间可以很好地理解其他方法的语义。

由于这些原因,枚举是不合适的,因为总会有不适合该枚举的“其他”值。

RFC 2616的更多引号:



和,


   Method         = "OPTIONS"                ; Section 9.2
                  | "GET"                    ; Section 9.3
                  | "HEAD"                   ; Section 9.4
                  | "POST"                   ; Section 9.5
                  | "PUT"                    ; Section 9.6
                  | "DELETE"                 ; Section 9.7
                  | "TRACE"                  ; Section 9.8
                  | "CONNECT"                ; Section 9.9
                  | extension-method
   extension-method = token

09-29 20:16