当我尝试有2个“Get”方法时,我一直得到这个错误
发现了多个与请求:webapi匹配的操作
我一直在看其他类似的问题,但我不明白。
我有2个不同的名字,并使用“HttpGet”属性
[HttpGet]
public HttpResponseMessage Summary(MyVm vm)
{
return null;
}
[HttpGet]
public HttpResponseMessage FullDetails()
{
return null;
}
当我尝试有2个“Get”方法时,我一直得到这个错误
发现了多个与请求:webapi匹配的操作
我一直在看其他类似的问题,但我不明白。
我有2个不同的名字,并使用“HttpGet”属性
[HttpGet]
public HttpResponseMessage Summary(MyVm vm)
{
return null;
}
[HttpGet]
public HttpResponseMessage FullDetails()
{
return null;
}
当前回答
这个解决方案对我很有效。
请将Route2放在WebApiConfig的前面。在每个方法之前添加HttpGet和HttpPost,并在url中包含控制器名和方法名。
WebApiConfig = >
config.Routes.MapHttpRoute(
name: "MapByAction",
routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional });
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional });
控制器= >
public class ValuesController : ApiController
{
[HttpPost]
public string GetCustomer([FromBody] RequestModel req)
{
return "Customer";
}
[HttpPost]
public string GetCustomerList([FromBody] RequestModel req)
{
return "Customer List";
}
}
Url = >
http://localhost:7050/api/Values/GetCustomer
http://localhost:7050/api/Values/GetCustomerList
其他回答
我知道这是一个老问题,但有时,当你使用AngularJS中的服务资源连接到WebAPI时,确保你使用了正确的路由,否则会发生这个错误。
由于使用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;
经过大量的网络搜索,并试图找到最适合的形式的路由地图 如果发现了以下情况
config.Routes.MapHttpRoute("DefaultApiWithId", "Api/{controller}/{id}", new { id =RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "Api/{controller}/{action}");
这些映射适用于动作名称映射和基本的http约定(GET,POST,PUT,DELETE)
你可以添加[Route("api/[controller]/[action]")]到你的控制器类中。
[Route("api/[controller]/[action]")]
[ApiController]
public class MySuperController : ControllerBase
{
...
}
这是每个知道一切都是正确的并检查了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个小时。