如何向ASP.NETWebAPI控制器添加显式操作route?

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

我有一个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错误信息。

我想我必须通过映射HTTP路由来解决这个问题,但是我尝试了几个路由,但我无法让它工作。我的路线应该是什么样子?

Rom_zRom_z提问于
Maj_Lundy回答于
已采纳

默认路由不包括操作。

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

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

您应该添加一个包含操作的附加路由。路由通常放在Application_start()方法WebApiConfig.cs。您的路线应该如下所示:

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

扫码关注云+社区

领取腾讯云代金券