儘管可能無法像在ASP.NET MVC中那樣設置多個路由,但可以嘗試使用易於使用的註釋來指定路由。
要啓用屬性的路由,你需要設置你的Register
方法:
config.MapHttpAttributeRoutes();
這使你設定的路線每種方法的方便:
[Route("customers/{customerId}/orders")]
public IEnumerable<Order> GetOrdersByCustomer(int customerId) { ... }
此外,RoutePrefix
允許避免重複提供整個路徑:
[RoutePrefix("api/books")]
public class BooksController : ApiController
{
// GET api/books
[Route("")]
public IEnumerable<Book> Get() { ... }
// GET api/books/5
[Route("{id:int}")]
public Book Get(int id) { ... }
// POST api/books
[Route("")]
public HttpResponseMessage Post(Book book) { ... }
}
編輯回來到您的評論:
看一看這個answer和DefaultHttpControllerSelector
來自於並充滿了某種邏輯的方式:
public class ApiControllerSelector : DefaultHttpControllerSelector
{
public ApiControllerSelector (HttpConfiguration configuration) : base(configuration) { }
public override string GetControllerName(HttpRequestMessage request)
{
// add logic to remove hyphen from controller name lookup of the controller
return base.GetControllerName(request).Replace('-', string.Empty));
}
}
爲了使這項工作,那麼你需要指定自定義ApiControllerSelector
在配置這樣的:
config.Services.Replace(typeof(IHttpControllerSelector),
new ApiControllerSelector(config));
喜,謝謝,是有沒有辦法全局配置,具有比特邏輯的,以打開駱駝控制器入連字符單獨d urls? – LocustHorde
查看更新後的答案,至少有一種方法可以攔截請求並在那裏修改控制器參數。 – rdoubleui
非常好,謝謝! – LocustHorde