【问题标题】:Why is the System.Web.Mvc.HttpVerbs class missing TRACE, CONNECT & OPTIONS?为什么 System.Web.Mvc.HttpVerbs 类缺少 TRACE、CONNECT 和 OPTIONS?
【发布时间】:2012-03-08 10:13:35
【问题描述】:

RFC 2616 HTTP/1.1 definition 声明存在以下常见的 HTTP 方法:

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

System.Web.Mvc.HttpVerbs 枚举缺少 TRACE、OPTIONS 和 CONNECT。

我有一个动作过滤器,它从请求中提取 HttpVerb 以做出某些决定(例如,如果一个请求是 PUT'ing 基本类型 A 的模型,那么我设置了一些数据),所以此实用程序代码为最后三个请求(主要是 OPTIONS - 看起来它来自 Google 翻译)抛出 ArgumentOutOfRangeException:

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 时调用该实用程序。这有点 hacky。

为什么枚举类中缺少它?有什么具体原因吗? MVC 不能处理这些类型的请求吗?

按照OPTIONS方法的说法,应该连MVC都进不去,应该由IIS自己处理吧?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 httpverbs rfc2616 http-options-method


    【解决方案1】:

    最终创建了我自己的枚举并使用它。

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-12
      • 1970-01-01
      • 2014-10-01
      • 1970-01-01
      • 1970-01-01
      • 2014-06-12
      相关资源
      最近更新 更多