Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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# 如何在asp.net mvc中从同一api控制器调用多个GET方法?_C#_Asp.net Mvc_Asp.net Mvc 4_Asp.net Web Api_Http Get - Fatal编程技术网

C# 如何在asp.net mvc中从同一api控制器调用多个GET方法?

C# 如何在asp.net mvc中从同一api控制器调用多个GET方法?,c#,asp.net-mvc,asp.net-mvc-4,asp.net-web-api,http-get,C#,Asp.net Mvc,Asp.net Mvc 4,Asp.net Web Api,Http Get,我正在使用asp.net mvc5和webapi 2。这是我的示例控制器- public class DataFetchController : ApiController { public async Task<HttpResponseMessage> GetDO() { return Request.CreateResponse("ok"); } public async Task<HttpResponseMessage&g

我正在使用asp.net mvc5和webapi 2。这是我的示例控制器-

public class DataFetchController : ApiController
{
    public async Task<HttpResponseMessage> GetDO()
    {
        return Request.CreateResponse("ok");
    }

    public async Task<HttpResponseMessage> GetDoes()
    {
        return Request.CreateResponse("ok");
    }
 }
当我运行此项目并尝试浏览“api/DataFetch/getdo”链接时,我遇到一个错误,显示-

{“$id”:“1”,“消息”:“出现错误” 已发生。“,“ExceptionMessage”:“找到多个匹配的操作 请求:\r\n在类型上删除 MagicMeter.Controllers.DataFetchController\r\n类型上的事件 MagicMeter.Controller.DataFetchController,“异常类型”:“System.InvalidOperationException”,“StackTrace”: 在 System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n位于 System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n位于 System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext,CancellationToken CancellationToken)\r\n位于 System.Web.Http.Dispatcher.HttpControllerDispatcher.d_u1.MoveNext()“}


如何解决此问题???

尝试将路线配置代码更改为此

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

我应该将其添加为new routes.maphttproute还是编辑现有的路由?您可以选择其中之一。如果您想将其添加为新路由,请更改名称,因为已经使用了DefaultAPI。应该注意,这将意味着您的API不是RESTful的。但是由于你的Q已经包含了这个动作,看起来你没有使用REST,所以在这种情况下应该可以。这是因为WebApi中的REST是如何工作的。您不需要像提供的答案所示使用REST(您需要在url中指定操作,而不是http谓词),但是根据问题的路由,
action
由http谓词决定,在本例中是
GET
。因为只有一个动词(GET),所以只有一个动作是由名称“GET*”自动决定的(或由标记决定的)。通过使用不同的重载(例如
GetAll()
Get(id)
)可以执行多个操作,但如果它们具有相同的签名,则不能执行。
 config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{action}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );