C# WebApi 路由机制剖析

2019-12-30 19:56:53刘景俊

 

WebApi还提供了一个action同时支持多个http方法的请求,使用AcceptVerbs特性去标记。但博主觉得实际使用并不多,有兴趣的可以了解下。


 [AcceptVerbs("GET", "POST")]
  public IHttpActionResult GetById(int id)
  {
   return Ok<string>("Success" + id );
  }

四、WebApi特性路由

上面说了这么多都是路由的一些全局配置。并且存在问题:

如果http请求的方法相同(比如都是post请求),并且请求的参数也相同。这个时候似乎就有点不太好办了,这种情况在实际项目中还是比较多的。比如


public class OrderController : ApiController
 {
  //订单排产
  [HttpPost]
  public void OrderProduct([FromBody]string strPostData)
  {

  }

  //订单取消
  [HttpPost]
  public void OrderCancel([FromBody]string strPostData)
  {
   
  }

  //订单删除
  [HttpPost]
  public void OrderDelete([FromBody]string strPostData)
  {
   
  }
 }

这个时候如果使用我们上面讲的Restful风格的路由是解决不了这个问题的。当然,有园友可能就说了,既然这样,我们在路由模板里面加上“{action}”不就搞定了么!这样确实可行。但还是那句话,不提倡。我们来看看如何使用特性路由解决这个问题。

1、启动特性路由

如果要使用特性路由,首先在WebApiConfig.cs的Register方法里面必须先启用特性路由:


public static void Register(HttpConfiguration config)
  {
   // 启用Web API特性路由
   config.MapHttpAttributeRoutes();

   //1.默认路由
   config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
   );
  }