C# 当我向控制器(RPC)添加另一个方法时,发现多个操作与请求匹配
我正在用C#和.NETFramework4.0开发一个ASP.NETMVC4WebAPI 我的控制器有问题:C# 当我向控制器(RPC)添加另一个方法时,发现多个操作与请求匹配,c#,asp.net,asp.net-mvc-4,asp.net-web-api,C#,Asp.net,Asp.net Mvc 4,Asp.net Web Api,我正在用C#和.NETFramework4.0开发一个ASP.NETMVC4WebAPI 我的控制器有问题: public class ASManagementController : ApiController { private readonly IExceptionLogHelper m_ExceptionLoggerHelper; public ASManagementController(IExceptionLogHelper exceptionLoggerHelpe
public class ASManagementController : ApiController
{
private readonly IExceptionLogHelper m_ExceptionLoggerHelper;
public ASManagementController(IExceptionLogHelper exceptionLoggerHelper)
{
m_ExceptionLoggerHelper = exceptionLoggerHelper;
}
[HttpGet]
public HttpResponseMessage IsConnected()
{
[ ... ]
}
[HttpPut]
public HttpResponseMessage DoConnect()
{
[ ... ]
}
[HttpPut]
public HttpResponseMessage DoReset()
{
[ ... ]
}
}
这是我的WebApiConfig
课程:
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// More routes...
config.Routes.MapHttpRoute(
name: "ASActionApi",
routeTemplate: "api/asManagement/{action}",
defaults: new { controller = "ASManagement" });
}
}
当我做https://localhost:44300/api/asManagement/DoConnect
我发现以下错误:
Multiple actions were found that match the request:
"ExceptionMessage":
"System.Net.Http.HttpResponseMessage DoConnect() in type MyPtoject.Web.Api.Controllers.ASManagementController
System.Net.Http.HttpResponseMessage DoReset() in type MyPtoject.Web.Api.Controllers.ASManagementController",
"ExceptionType":"System.InvalidOperationException"
如何修复此错误
如果我在ASManagementController
上删除doConnect
方法,它会工作。你知道为什么吗
一个不太干净的解决方案是在
WebApiConfig
类中将ASActionApi
定义移到DefaultApi
之前。尝试将ASActionApi移到DefaultApi之前
传入URL将按照模式在路由字典中出现的顺序与路由模式进行比较(这就是我们在RouteConfig.cs文件中添加路由映射的顺序)。成功将控制器、操作和操作参数与URL中的参数或路由映射中定义的默认值匹配的第一条路由将调用指定的控制器和操作
这些都是ASManagementController中的方法吗?或者,是否有任何具有actionname属性并将DoConnect指定为操作名称的操作?在ASActionApi之前定义的路由是否与请求URL匹配?是的,这些都是方法。不,没有任何路由可以匹配请求的URL。我已经按照您的建议进行了操作,并且可以正常工作。但我不明白为什么。如果我不在
WebApiConfig
上更改任何内容,并且在ASManagementController
上删除doConnect
方法,它就会工作。我相信ApiController的默认路由规则只允许一个Get和一个Put。如果您有多个Put,那么它不知道选择哪一个。Raven的解决方案是通过在DefaultApi之前移动ASActionApi来覆盖默认路由规则。