【问题标题】:Setting WebAPI routing设置 Web API 路由
【发布时间】:2016-08-03 04:33:20
【问题描述】:

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 条路线会出现什么问题?

【问题讨论】:

  • 您希望id 是什么类型。您可能需要添加一个约束,因为它代表您显示的路径将匹配两个模板,因为 id 是可选的

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


【解决方案1】:

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

发件人:

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 路线并不是一个好主意。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2016-11-28
    • 2019-02-18
    • 1970-01-01
    • 2021-05-31
    相关资源
    最近更新 更多