为什么System.Net.Http.HttpMethod是一个类而不是枚举?

29

HttpStatusCode 是一个枚举类型,每个可能的值都对应一个HTTP状态码(例如(int)HttpStatusCode.Ok == 200)。

然而,HttpMethod 被实现为一个 ,其中有静态属性可以获取各种HTTP动词的实例(如HttpMethod.GetHttpMethod.Put等)。那么,为什么不将 HttpMethod 实现为枚举类型呢?


你是在问它是否可以成为一个枚举并将其方法转移到其他类中吗? - snit80
1
它本来可以是一个枚举类型,但那样就不能支持标准以外的其他HTTP动词。实际上,在System.Net.Cache名称空间中有一个名为HttpMethod的枚举类型。 - sloth
3个回答

39

文档(重点在我):

备注

HttpMethod 最常见的用法是使用此类上的静态属性之一。 但是,如果应用程序需要不同的 HTTP 方法值,则 HttpMethod 构造函数将使用应用程序指定的 HTTP 方法初始化新的 HttpMethod 实例。

当然,这对于枚举来说是不可能的。

请参阅其构造函数方法属性


2
啊,这就解释了。我之所以提出问题,主要是因为我推断“所有允许的动词都在标准中指定 - 为什么不直接列举它们呢?”,但是支持非标准动词,在这里是一个合理的考虑。感谢您的澄清! - Tomas Aschan
关于使用具有静态成员的类作为枚举的替代方案的一些额外资源:https://ardalis.com/enum-alternatives-in-c/https://learn.microsoft.com/en-us/dotnet/architecture/microservices/microservice-ddd-cqrs-patterns/enumeration-classes-over-enum-types - ryancdotnet

7

经过多年的时间,我想 Microsoft 听到了您的愿望...

这就是您所期望拥有的东西...

HttpVerb


1
注意:需要 Microsoft.AspNet.Mvc。 - ryancdotnet

0
对于ASP.NET Core,您有以下枚举类型。
Microsoft.AspNetCore.Server.Kestrel.Core.Internal.Http.HttpMethod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接