0

RFC 2616 HTTP/1.1 定义指出存在以下常见的 HTTP 方法:

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 本身处理?

4

1 回答 1

0

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

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

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

于 2012-02-20T05:37:22.643 回答