当我尝试有2个“Get”方法时,我一直得到这个错误

发现了多个与请求:webapi匹配的操作

我一直在看其他类似的问题,但我不明白。

我有2个不同的名字,并使用“HttpGet”属性

[HttpGet]
public HttpResponseMessage Summary(MyVm vm)
{
    return null;
}

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

当前回答

在Web API中(默认情况下),方法的选择是基于HTTP方法和路由值的组合。

MyVm看起来像一个复杂的对象,由格式化器从对象体中读取,因此在路由数据方面有两个相同的方法(因为它们都没有来自路由的任何参数)——这使得分派器(IHttpActionSelector)不可能匹配适当的方法。

您需要通过查询字符串或路由参数来区分它们以解决歧义。

其他回答

这是每个知道一切都是正确的并检查了50次的人的答案.....

确保你没有反复查看RouteConfig.cs。

要编辑的文件名为WebApiConfig.cs

另外,它应该是这样的:

using System.Web.Http;

namespace My.Epic.Website
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
          config.MapHttpAttributeRoutes();

          // api/Country/WithStates
          config.Routes.MapHttpRoute(
            name: "ControllerAndActionOnly",
            routeTemplate: "api/{controller}/{action}",
            defaults: new { },
            constraints: new { action = @"^[a-zA-Z]+([\s][a-zA-Z]+)*$" });

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

我可以为自己节省3个小时。

有可能你的webmethods被解析为相同的url。请浏览以下连结:-

http://www.asp.net/web-api/overview/web-api-routing-and-actions/routing-in-aspnet-web-api

所以,你可能需要将你的methodname添加到路由表中。

如果不使用操作,选项将是:

将其中一个方法移动到不同的控制器,这样它们就不会冲突。 只使用一个接受参数的方法,如果它为空,则调用代码中的另一个方法。

由于使用MVC控制器而不是Web API控制器,这是可能的。 检查Web API控制器中的命名空间,它应该如下所示

using System.Net;
using System.Net.Http;
using System.Web.Http;

如果命名空间如下所示,则在web api控制器方法调用时给出上述错误

using System.Web;
using System.Web.Mvc;

请检查你有两个方法有不同的名称和相同的参数。

如果是这样,请删除任何方法,并尝试。