我正在为本地代码夏令营进行讨论,并试图了解ApiController中HTTP动词的细微差别。关于ApiController的几件事情在Beta,RC和最终版本之间发生了很大的变化,关于如何设置它的建议是冲突的,有时是错误的。Web API - 支持的动词?
假设我只是留在WebApiConfig标准路由:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
(因为你真的可以把东西放在自己的头上,如果你在{动作}参数添加这里)
我了解该公约是工作简单的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)
{
}
,或者你可以用动词的名字,只要他们开始改变这些:
// GET api/values/5
public string GetMyStuff(int id)
{
return "value";
}
但是,最初的规范说ApiController支持Get,Put,Post和Delete。 用于然而,我可以添加方法:
public void HeadOfTheClass()
{
}
这对于一个头动词的作品,但我不能添加方法模糊不清或不存在的动词:
public void MKCOL()
{
}
public void Bubba()
{
}
什么是完整的列表本机“支持”动词?
[AcceptVerbs("MKCOL")]
public void MKCOL()
{
}
[AcceptVerbs("Bubba")]
public void Bubba()
{
}
这也适用,或任何“定义”动词使用http属性:
[HttpHead]
public void HeadOfTheClass()
{
}
[HttpGet]
public void Bubba()
{
}
这是
我可以然而通过使用AcceptVerb属性添加这些方法支持正确或优先? (还有[GET]和[POST]等属性,这些是否被弃用?)
[HttpBindNever]和[NonAction]是否等效?
在所以最好是在一个时间要求只有一个问题。我回答了什么似乎是主要问题。如果您编辑此问题并从中创建2个或3个单独的问题,这可能是最好的。 – ScottS