我有一个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 }
        );

回答过的其他问题

云计算实现中虚拟化技术是如何运用的?

微信小程序html转换成wxml?

这里提供了一个工具https://github.com/timezhong/html2wxml 使用办法 下载安装包 将需要处理的html文件拖进软件打开界面即可自动转化,处理完成后将在当前目录新建一个wxml文件夹,其中包含处理后的文件。 非常方便 ... 展开详请

如何保存或导出Google Chrome的JavaScript控制台输入历史记录?

试试以下方法: 打开Chrome开发工具(按CTRL+Shift+J) 如果已停靠Developer Tools窗口,请将其卸载到单独的窗口(打开⋮菜单可选择停靠选项) 在Developer Tools窗口中,按CTRL+Shift+J,这将打开Developer Tools窗...... 展开详请

错误“程序类型:添加新库时的android.support.design.widget.CoordinatorLayout$Behavior”

这是因为以下依赖关系: implementation 'com.theartofdev.edmodo:android-image-cropper:2.7.0' 正在使用支持库版本。 因此,需要使用一个匹配的支持库,即27.1.1版本。改变你的建筑。分级如下: apply plu...... 展开详请

香港、澳门、台湾或国外的公司能否申请备案?

推荐
个人备案:1、如果客户人在香港、澳门、台湾或国外,中国大陆内没有固定地址,则无法备案2、如果客户人在大陆地区,有固定地址,可以使用港澳居民来往内地通行证(回乡证)、台胞证或护照进行备案,备案地区就选择客户在中国大陆的通讯地址所属的地区,主体地址按照台胞证上的地址填写,通讯地址填写...... 展开详请

点播计费模式如何更改?

腾讯云点播服务当前支持用户采用预付费套餐方式计费。当月超出套餐部分按照超出部分存储空间和流量计费,按月计费,结算周期为每个月1-5日,从腾讯云账户扣除上个月超流量和超空间总费用。超出最大套餐流量用户,支持商务沟通定价。具体请拨打咨询热线4009100100或提交工单进行确认。详情...... 展开详请

关于作者

所属标签

扫码关注云+社区