2015-07-04 78 views
2

我希望能夠解析這樣的問題鏈接是:Web api - 如何使用slu route路由?

http://stackoverflow.com/questions/31223512/web-api-how-to-route-using-slugs 

服務器只是忽略 URL的最後一部分就這麼路線。作爲使用過這個問題,我怎麼能實現路由正確,如果有人進入這樣一個URL的例子,它重定向我:

http://stackoverflow.com/questions/31223512 

回答

3

引用:Handling a Variable Number of Segments in a URL Pattern

有時你必須處理URL請求其中包含一個變量 個URL段。定義路線時,如果URL的段數多於模式中的段數,則可以指定 ,但額外的 段將被視爲最後一段的一部分。要以這種方式處理 附加分段,請使用星號(*)標記最後一個參數 。這被稱爲全部參數。具有catch-all參數的路由 也將匹配最後一個參數不包含任何值的URL。

基於約定路線會被映射爲...

config.Routes.MapHttpRoute(
    name: "QuestionsRoute", 
    routeTemplate: "questions/{id}/{*slug}", 
    defaults: new { controller = "Questions", action = "GetQuestion", slug = RouteParameter.Optional } 
); 

,或者與屬性路由路由看起來是這樣......

[Route("questions/{id:int}/{*slug?}")] 

這都可以與示例控制器動作匹配...

public IActionResult GetQuestion(int id, string slug = null) {...} 

的例子網址...

"questions/31223512/web-api-how-to-route-using-slugs" 

那麼將有相匹配的參數如下...

  • id = 31223512
  • slug = "web-api-how-to-route-using-slugs"

而且由於slug是可選,上面的URL仍然會匹配到

"questions/31223512" 

這應該符合您的要求。

+0

我希望你能得到一個死靈徽章:D –