0

RFC 2616 HTTP/1.1 definition指出以下常见的HTTP方法有:为什么System.Web.Mvc.HttpVerbs类缺少TRACE,CONNECT&OPTIONS?

GET,HEAD,POST,PUT,DELETE,TRACE,OPTIONS,CONNECT

System.Web.Mvc.HttpVerbs枚举缺少TRACE,OPTIONS & CONNECT。

我有一个操作过滤器,它从请求中获取HttpVerb以做出某些决定(例如,如果某个请求是PUT'ing基本类型A的模型,那么我设置了一些数据),所以该实用程序代码被抛出ArgumentOutOfRangeException在过去三年的要求(主要是OPTIONS - 看起来像是从谷歌来翻译):

public static HttpVerbs GetHttpVerb(this HttpRequestBase httpRequestBase) 
{ 
    switch (httpRequestBase.HttpMethod) 
    { 
     case "GET": 
      return HttpVerbs.Get; 
     case "POST": 
      return HttpVerbs.Post; 
     case "PUT": 
      return HttpVerbs.Put; 
     case "DELETE": 
      return HttpVerbs.Delete; 
     case "HEAD": 
      return HttpVerbs.Head;  
     default: 
      throw new ArgumentOutOfRangeException("httpRequestBase"); 
    } 
} 

不知道如何解决这个问题 - 任何想法?

我唯一能想到的就是改变所有参考代码,先检查原始的HTTP方法,然后只调用实用工具,如果它不是TRACE,OPTIONS或CONNECT。这有点哈克。

为什么它从枚举类中丢失?它有一个特定的原因吗? MVC可以不处理这些类型的请求吗?

通过OPTIONS方法的声音,它甚至不应该得到MVC,它应该由IIS本身处理?

回答

0

结束创建我自己的枚举并使用它。

public enum HttpVerb 
{ 
    Get, 
    Head, 
    Post, 
    Put, 
    Delete, 
    Trace, 
    Options, 
    Connect 
} 

MVC似乎仍然处理OPTIONS类型的请求。