2016-01-07 40 views
3

我試圖將看起來像/action-figure/的網址映射到ActionFigureController。也就是說,我的URL是連字符分隔的控制器。WebApi中控制器名稱的連字符網址

類似於this answer exactly,但用於WebApi而不是MVC路由。

如何在WebApi中配置我的URL?

幾乎所有的谷歌搜索指引我MVC路由配置,我沒能找到它的等價物:

config.MapHttpAttributeRoutes(); 

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

MvcRouteHandler並不適用於這一點,我不知道在哪裏,甚至傳入自定義路由配置。

回答

1

儘管可能無法像在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) { ... } 
} 

編輯回來到您的評論:

看一看這個answerDefaultHttpControllerSelector來自於並充滿了某種邏輯的方式:

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)); 
+0

喜,謝謝,是有沒有辦法全局配置,具有比特邏輯的,以打開駱駝控制器入連字符單獨d urls? – LocustHorde

+0

查看更新後的答案,至少有一種方法可以攔截請求並在那裏修改控制器參數。 – rdoubleui

+0

非常好,謝謝! – LocustHorde

相關問題