2017-06-28 27 views
1

我在WebApiConfig.cs以下文件:設置 -

// Web API routes 
config.MapHttpAttributeRoutes(); 
config.Routes.MapHttpRoute(
      name: "UserLogin", 
      routeTemplate: "api/{controller}/{UserInitials}/{UserPin}", 
      defaults: new { id = RouteParameter.Optional } 
      ); 

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

//This one below does not work as one above is always taken first!! 
config.Routes.MapHttpRoute(
      name: "BarcodeQuery", 
      routeTemplate: "api/{controller}/{UserID}/{UserCode}/{BarCode}", 
      defaults: new { id = RouteParameter.Optional } 
      ); 

我希望能夠通過所謂的要使用的控制器,此刻的URL指定,因爲上次條目有三個參數,它從來沒有被選擇,中間的參數。

例如,我想下面的網址,以呼叫控制器我註明:

http://myserver/api/UserLogin/AS/1234 
http://myserver/api/BinQuery/AS/1234/ABC123 
http://myserver/api/BarcodeQuery/AS/1234/3424532543 

希望這是有點清楚我想要的目的。

+0

他們有相同的模板。你必須決定如何區分一個和另一個。 – Nkosi

回答

1

它們具有相同的路由模板,所以存在路由衝突。

你必須決定如何唯一地區分彼此。

如果這些路由屬於特定的控制器,那麼使用它作爲區分因素。

你還希望更具體的路線來更加普遍的路線。所以,放置UserLogin路線,因爲用途{controller}佔位最後在模板

config.Routes.MapHttpRoute(
    name: "BinQuery", 
    routeTemplate: "api/BinQuery/{UserID}/{UserCode}/{BinCode}", 
    defaults: new { controller = "BinQuery" } 
); 

config.Routes.MapHttpRoute(
    name: "BarcodeQuery", 
    routeTemplate: "api/BarcodeQuery/{UserID}/{UserCode}/{BarCode}", 
    defaults: new { controller = "BarcodeQuery" } 
); 

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