Asp.net web api Web API支持的动词?
我正在为一个本地代码营做一次演讲,试图理解ApiController中HTTP动词的细微差别。ApiController在Beta版、RC版和最终版本之间有一些显著的变化,关于如何设置的建议是相互矛盾的,有时是错误的 假设我刚刚离开WebApiConfig中的标准路由:Asp.net web api Web API支持的动词?,asp.net-web-api,asp.net-web-api-routing,Asp.net Web Api,Asp.net Web Api Routing,我正在为一个本地代码营做一次演讲,试图理解ApiController中HTTP动词的细微差别。ApiController在Beta版、RC版和最终版本之间有一些显著的变化,关于如何设置的建议是相互矛盾的,有时是错误的 假设我刚刚离开WebApiConfig中的标准路由: config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
(因为如果你在这里添加一个{action}参数,你真的可以把事情摆在他们的头上)
我了解公约如何适用于简单的Crud调用,如:
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
// POST api/values
public void Post([FromBody]string value)
{
}
然而,最初的规范说ApiController支持Get、Put、Post和Delete。
但我可以为以下内容添加方法:
public void HeadOfTheClass()
{
}
它适用于中心动词,但我不能为模糊或不存在的动词添加方法:
public void MKCOL()
{
}
public void Bubba()
{
}
本地“受支持”动词的完整列表是什么
但是,我可以使用AcceptVerb属性添加对这些方法的支持:
[AcceptVerbs("MKCOL")]
public void MKCOL()
{
}
[AcceptVerbs("Bubba")]
public void Bubba()
{
}
这也适用,或者对于任何“已定义”动词,请使用Http属性:
[HttpHead]
public void HeadOfTheClass()
{
}
[HttpGet]
public void Bubba()
{
}
哪个是正确的还是首选的?(还有[GET]和[POST]等属性,这些属性是否已弃用?)
[HttpBindNever]和[NoAction]等价吗?我喜欢开源
从ReflectedHttpActionDescriptor:
private static readonly HttpMethod[] _supportedHttpMethodsByConvention =
{
HttpMethod.Get,
HttpMethod.Post,
HttpMethod.Put,
HttpMethod.Delete,
HttpMethod.Head,
HttpMethod.Options,
new HttpMethod("PATCH")
};
因此,最好一次只问一个问题。我回答了似乎是主要的问题。最好是编辑此问题并从中创建2或3个单独的问题。
private static readonly HttpMethod[] _supportedHttpMethodsByConvention =
{
HttpMethod.Get,
HttpMethod.Post,
HttpMethod.Put,
HttpMethod.Delete,
HttpMethod.Head,
HttpMethod.Options,
new HttpMethod("PATCH")
};