我正在爲本地代碼夏令營進行討論,並試圖瞭解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