RFC 2616 HTTP/1.1 definition声明存在以下常见的HTTP方法:
GET、HEAD、POST、PUT、DELETE、TRACE、OPTIONS、CONNECT
但是System.Web.Mvc.HttpVerbs枚举缺少跟踪、选项和连接。
我有一个动作过滤器,它从请求中提取HttpVerb,以便做出某些决定(例如,如果一个请求放入一个基本类型A的模型,那么我设置了一些数据),所以这个实用程序代码为后三个请求抛出一个ArgumentOutOfRangeException (主要是选项-看起来像是来自Google Translate):
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自己处理?
发布于 2012-02-20 13:37:23
最终创建了我自己的枚举并使用它。
public enum HttpVerb
{
Get,
Head,
Post,
Put,
Delete,
Trace,
Options,
Connect
}MVC似乎仍然处理OPTIONS类型的请求。
https://stackoverflow.com/questions/9321021
复制相似问题