为什么System.Web.Mvc.HttpVerbs类缺少TRACE,CONNECT&选择?

时间:2012-02-17 00:01:22

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

RFC 2616 HTTP/1.1 definition表示存在以下常见HTTP方法:

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

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

我有一个动作过滤器从请求中获取HttpVerb以便做出某些决定(例如,如果请求是PUT的基类型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)。这有点像黑客。

为什么enum类中缺少它?它有具体原因吗? MVC可以根本不处理这些类型的请求吗?

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

1 个答案:

答案 0 :(得分:0)

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

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

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