【发布时间】: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