设置WebAPI路由

时间:2016-04-12 13:52:49

标签: angularjs asp.net-web-api routing asp.net-web-api-routing

WebApiConfig我添加到路线:

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

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

在ApiController中,我有2个GET动作:

[HttpGet]
public async Task<IEnumerable<RequestModel>> Pending(){}

[HttpGet]
public async Task<IEnumerable<RequestModel>> Resolved()

当我尝试从AngularJS服务调用此操作之一时,我得到500错误。

  

找到了与请求匹配的多项操作

当我只离开第二条路线时,那与我的动作相符 - 效果很好。

"/api/v1/RequestRecipient/Pending"

在2条路线的情况下会出现什么问题?

1 个答案:

答案 0 :(得分:0)

经过一些研究后我找到了解决方案 - 只需要改变路线的顺序。

来自:

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

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

收件人:

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

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

但我也发现了一些意见,认为行动和非行动路线不是一个好主意。