2016-04-26 81 views
0

我正在使用Web Api。默認情況下,它使用api/{controller}/{id}作爲url。我可以讓它路由API /設備/ {控制器}/{id},但這將影響到該路徑的所有Web API路由。Visual Studio Web API:如何更改路由路徑

但我只想要某個控制器在api/device/{controller}/{id}中,其餘的將轉到另一個路徑。

我看到的東西像RoutePrefix但它似乎沒有工作...

[RoutePrefix (api/data/abc)] where abc is the controller name. 

回答

0

在WebApiConfig.cs文件中添加自定義路由映射之前默認的路線圖: 之前加入這個,任何請求與自定義路線相匹配的將被執行,否則另一個。

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

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

但是,如果我輸入api/abc/3但仍然映射,但這應該在api/device/abc/3下。所以如果我輸入api/abc/3,應該找不到頁面。 – LittleFunny

+0

你可以過來聊天嗎 - https://chat.stackoverflow.com/rooms/110209/karthik-simon –

0

如果你想定製與路由每個控制器的方法,那麼你必須使用屬性而不是路由標準的基於約定的路由的。

裝飾你的控制器,RoutePrefix屬性,並與Route屬性,這樣你的行動:

[RoutePrefix("api/device/mydevice")] 
public class MyDeviceController : ApiController { 

    [Route("{id}")] 
    [HttpGet] 
    public IHttpActionResult Get(int id) { 
     //DoWork 
     //... 
    } 
} 

記住,使屬性HttpConfiguration對象路由:

config.MapHttpAttributeRoutes(); 

您也可以刪除MapHttpRoute方法調用如果您不想以基於標準約定的方式訪問您的操作。

更多關於official documentation的屬性路由。