2017-06-28 4 views
1

ich folgend in meinem WebApiConfig.cs habe Datei:Aufbau 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 } 
      ); 

Ich mag von der URL angeben können, welchem ​​Controller zu verwenden, im Moment genannt, weil die letzten Eintrag hat drei Parameter, die nie gewählt werden, der mittlere tut es.

Zum Beispiel würde ich die folgenden URLs wie Controller nenne ich angeben:

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

Hope this etwas klar ist, was ich zu erreichen versuchen.

+0

Sie die gleiche Vorlage haben. Sie müssen entscheiden, wie Sie die eine voneinander unterscheiden. – Nkosi

Antwort

1

Sie haben die gleiche Routenvorlage, daher gibt es einen Routenkonflikt.

Sie müssen entscheiden, wie Sie die eine voneinander unterscheiden.

Wenn diese Routen zu einem bestimmten Controller gehören, dann verwenden Sie diesen als Unterscheidungsfaktor.

Sie möchten auch eine spezifischere Route vor allgemeineren Routen. So legen Sie die UserLogin Route zuletzt seit Verwendungen {controller} Platzhalter in seiner Vorlage

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 } 
);