标签:
如果一条路由匹配,WebAPI选择controller和action通过如下方式:
1.找到controller,将"controller"赋值给{controller}变量
2.寻找action,web api查看http的请求方式,然后寻找一个以对应请求方式开头的action,如Get请求,需要寻找一个名为Get...的action,这种方式仅支持Get,Post,Put和Delete操作。
除了依据Http请求的方式,还可以显示为action指定http method通过HttpGet, HttpPut, HttpPost和 HttpDelete这些attribute
public class ProductsController : ApiController { [HttpGet] public Product FindProduct(id) {} }
为一个action指定多个可以接受的http method
public class ProductsController : ApiController { [AcceptVerbs("GET", "HEAD")] public Product FindProduct(id) { } // WebDAV method [AcceptVerbs("MKCOL")] public void MakeCollection() { } }
对于默认的路由模板,web api使用http method来选择action,我们可以创建一个包含action这个占位符的路由
routes.MapHttpRoute( name: "ActionApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } );
可以重写action的名字通过使用ActionName这个attribute【如果使用默认的路由模板,这种修改acting的名字方式也没用了】
public class ProductsController : ApiController { [HttpGet] [ActionName("Thumbnail")] public HttpResponseMessage GetThumbnailImage(int id); [HttpPost] [ActionName("Thumbnail")] public void AddThumbnailImage(int id); }
NonAction这个attribute可以将method标记为不是一个action,此时即使通过路由匹配到了这个方法。
// Not an action method. [NonAction] public string GetPrivateData() { ... }
标签:
原文地址:http://www.cnblogs.com/goodlucklzq/p/4415273.html