Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 当我向控制器(RPC)添加另一个方法时,发现多个操作与请求匹配_C#_Asp.net_Asp.net Mvc 4_Asp.net Web Api - Fatal编程技术网

C# 当我向控制器(RPC)添加另一个方法时,发现多个操作与请求匹配

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

我正在用C#和.NETFramework4.0开发一个ASP.NETMVC4WebAPI

我的控制器有问题:

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来覆盖默认路由规则。