路由前缀
通常,控制器中的路由具有相同的前缀,以某种方式与该控制器的功能连接。例如:
public class ProductsController : ApiController
{
[Route("api/products")]
public IEnumerable<Product> GetProducts() { ... }
[Route("api/products/{id:int}")]
public Product GetProduct(int id) { ... }
[Route("api/products")]
[HttpPost]
public HttpResponseMessage CreateProduct(Product product) { ... }
}
在这种情况下,我们可以为整个控制器设置公共前缀。为此,我们使用 [RoutePrefix]
属性:
[RoutePrefix("api/products")]
public class ProductsController : ApiController
{
// GET api/products
[Route("")]
public IEnumerable<Product> GetProducts() { ... }
// GET api/products/5
[Route("{id:int}")]
public Product GetProduct(int id) { ... }
//POST api/products
[Route("")]
[HttpPost]
public HttpResponseMessage CreateProduct(Product product) { ... }
}
覆盖路由前缀
如果我们想要覆盖路由前缀,我们可以在方法的 routing 属性中使用 tilde (〜) :
[RoutePrefix("api/products")]
public class ProductsController : ApiController
{
// GET api/owners/products
[Route("~/api/owners/products")]
public IEnumerable<Product> GetProducts() { ... }
//...
}