向ASP.NETWebAPI控制器添加显式操作路由?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (62)

有一个ASP.NETWebAPI项目ApiController提供了一个User具有以下操作的端点:

GET /api/User
POST /api/User
DELETE /api/user

想提供以下端点:

GET /api/user/metrics

但是,当像这样定义控制器操作时:

[HttpGet]
public HttpResponseMessage Metrics()
{
    return null;
}

得到了Multiple actions were found that match the request错误信息。

提问于
用户回答回答于

默认路由不包括操作。

routes.MapHttpRoute(
    name: "API Default",
    routeTemplate: "api/{controller}/{id}",
    defaults: new { id = RouteParameter.Optional }
);

它根据路由中的控制器、HTTP谓词和参数(或缺少参数)选择操作。因此,它是找到正确的控制器,并寻找一个GET动作,没有参数。它找到了两个。

路线应该如下所示:

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

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

扫码关注云+社区

领取腾讯云代金券