WebApiConfig.cs的设置 -

时间:2017-06-28 19:48:48

标签: c# asp.net-web-api2 asp.net-web-api-routing

我的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指定要使用哪个控制器,因为最后一个条目有三个参数,它们永远不会被选中,中间一个参数。

例如,我希望以下URL来调用我指定的控制器:

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

希望这有点清楚我想要实现的目标。

1 个答案:

答案 0 :(得分:1)

它们具有相同的路由模板,因此存在路由冲突。

您必须决定如何区分彼此。

如果这些路线属于特定的控制器,那么将其用作区别因素。

您还希望在更一般的路线之前有更具体的路线。因此,将/^[0-9]{2}[A-Z]{5}[0-9]{4}[A-Z]{1}[1-9A-Z]{1}Z[0-9A-Z]{1}$/ 路由放在最后,因为在其模板

中使用UserLogin占位符
{controller}