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類型的請求。