我有一个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...... 展开详请

无法调用类型缺少调用签名的表达式。

也许创建一个共享的Fruit接口提供isDecayed。fruits现在是类型Fruit[]所以类型可以是显式的。就像这样: interface Fruit { isDecayed: boolean; } interface Apple extends Fruit {...... 展开详请

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

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

关于作者

所属标签

扫码关注云+社区