Jim*_*im 2 asp.net-web-api asp.net-web-api-routing
我把共同为本地代码阵营谈话,我试图了解ApiController HTTP动词的细微差别.约ApiController几件事情Beta版,RC最终版本,并建议之间显著改变你如何设置这是相互矛盾的,有时甚至是错误的.
假设我刚刚离开WebApiConfig中的标准路由:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
Run Code Online (Sandbox Code Playgroud)
(因为你真的可以把东西放在自己的头上,如果你在{}动作添加参数点击这里)
我理解约定如何适用于简单的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)
{
}
Run Code Online (Sandbox Code Playgroud)
或者你可以改变这些,只要它们以动词名称开头:
// GET api/values/5
public string GetMyStuff(int id)
{
return "value";
}
Run Code Online (Sandbox Code Playgroud)
但是,最初的规范说ApiController支持Get,Put,Post和Delete.然而,我可以添加方法:
public void HeadOfTheClass()
{
}
Run Code Online (Sandbox Code Playgroud)
哪个适用于Head动词,但我无法为隐藏或不存在的动词添加方法:
public void MKCOL()
{
}
public void Bubba()
{
}
Run Code Online (Sandbox Code Playgroud)
Native"Supported"动词的完整列表是什么?
但是,我可以使用AcceptVerb属性添加对这些方法的支持:
[AcceptVerbs("MKCOL")]
public void MKCOL()
{
}
[AcceptVerbs("Bubba")]
public void Bubba()
{
}
Run Code Online (Sandbox Code Playgroud)
这也有效,或者对于任何"已定义"的动词使用Http属性:
[HttpHead]
public void HeadOfTheClass()
{
}
[HttpGet]
public void Bubba()
{
}
Run Code Online (Sandbox Code Playgroud)
哪个是正确的还是首选的?(也有像[GET]和[POST]这样的属性,这些是否被弃用?)
[HttpBindNever]和[NonAction]是否相同?
我喜欢开源.:)
来自ReflectedHttpActionDescriptor:
private static readonly HttpMethod[] _supportedHttpMethodsByConvention =
{
HttpMethod.Get,
HttpMethod.Post,
HttpMethod.Put,
HttpMethod.Delete,
HttpMethod.Head,
HttpMethod.Options,
new HttpMethod("PATCH")
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2821 次 |
| 最近记录: |