Asp.net web api ASP.NET Web API操作-每个控制器只能获取一个?

Asp.net web api ASP.NET Web API操作-每个控制器只能获取一个?,asp.net-web-api,Asp.net Web Api,我是ASP.NET Web API的新手,但我遇到了一个问题,即如果我尝试向单个控制器添加两个get方法,那么尝试获取操作失败。每个控制器是否只允许一个get,除非我们添加相同方法的重载 如果我只有一个get方法,例如第一个方法,则此方法有效。一旦我将Get添加到第二个方法名,它就会给我一个500 [HttpGet] public string GetToday() { return "Hello today"; } [HttpGet] public string GetPending

我是ASP.NET Web API的新手,但我遇到了一个问题,即如果我尝试向单个控制器添加两个get方法,那么尝试获取操作失败。每个控制器是否只允许一个get,除非我们添加相同方法的重载

如果我只有一个get方法,例如第一个方法,则此方法有效。一旦我将Get添加到第二个方法名,它就会给我一个500

[HttpGet]
public string GetToday()
{
    return "Hello today";
}

[HttpGet]
public string GetPending()
{
    return "Hello Pending";
}
我打的电话:

如果方法名为'Today',只要我放入[HttpGet]属性,我就可以进行此调用。但前提是我没有第二个动作。这意味着如果我从第二个方法中删除[HttpGet]属性,并从方法名中删除'Get',使其处于挂起状态,那么它就可以工作

只要有两种get方法,我就会得到这个错误:


{“Message”:“出现错误。”,“ExceptionMessage”:“找到了多个与请求匹配的操作:\r\nSystem.String TodaysTasks(),类型为TaskTrackerService.Controller.TasksController\r\nSystem.String PendingTasks(),类型为TaskTrackerService.Controller.TasksController”,“ExceptionType”:“System.InvalidOperationException”,“StackTrace”:“在System.Web.Http.Controller.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n在System.Web.Http.Controller.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n在System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext,CancellationToken CancellationToken)\r\n在System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage请求,CancellationToken CancellationToken)\r\n在System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage request,CancellationToken CancellationToken)“}

Web API背后的理念是它代表一个。ReST的语义意味着控制器对应于一个“”的理念,而该行为是由用于访问资源的HTTP动词决定的-表示GET、POST、PUT、DELETE等

用于这些资源的模型是,您将它们视为“y”,即您查询资源的元素,将新元素放入资源,更新资源中的元素,这样您就知道了

对于每个(相关)动词,您应该只有一个操作来处理这种性质的请求。GET访问多个操作的想法不是非常ReSTful,更像是MVC-ish-RPC风格的思维模式,不太适合ASP.NET Web API

因此,您的控制器可能会被写入:

公共类FooController:ApiControlle
{
[HttpGet]
公共帐户获取(字符串样式)
{
开关(味道){
案例“问候”:回复“今天你好”;
案例“待定”:返回“Hello pending”;
默认值:抛出新的InvalidOperationException(“无法获得您的foo味道:(”);
}
}
}

但正如您在评论中所写,问题在于您从未打算将控制器用作Web API控制器,而是MVC控制器。

您可以有任意多个操作。您可以发布代码吗?您可以显示您正在尝试的操作吗?您只能有一个具有相同方法签名的GET,但可以有任意数量具有不同na的操作mes或签名(以及指向它们的路由)请发布一些代码,显示您的控制器操作和路由配置这是ASP.NET Web API而不是MVC,因此我将对问题进行编辑。我发现了-默认配置是webapiconfig而不是routeconfig,而不是{controller}/{action}/{id}它有API/{controller}/{id}。当我在那里添加action时,效果很好。现在它很有意义。谢谢!我将把这个留给其他人,他们和我一样,在搜索类似但与Web API相关的问题时遇到了这个问题。