设置 WebAPI 路由

Setting WebAPI 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 错误。

Multiple actions were found that match the request

当我只留下第二条路线时,它与我的行动相匹配 - 它运作良好。

"/api/v1/RequestRecipient/Pending"

如果有 2 条路线,会出现什么问题?

经过一番研究,我找到了解决方案 - 只需更改路线顺序即可。

发件人:

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

但我也发现了一些人的意见,即拥有 Action 和 Non-Action 路线并不是一个好主意。