【发布时间】:2013-03-08 20:43:01
【问题描述】:
我是 ASP.NET Web API 的新手,但我遇到了一个问题,即如果我尝试将两个 get 方法添加到单个控制器,则无法尝试获取操作。除非我们添加相同方法的重载,否则每个控制器是否只允许一次获取?
如果我只有一个 get 方法,这可行,例如第一个。一旦我将 Get 添加到第二个方法名称,它就会给我一个 500。
[HttpGet]
public string GetToday()
{
return "Hello today";
}
[HttpGet]
public string GetPending()
{
return "Hello Pending";
}
我正在拨打的电话: http://abc.com/api/tasks/gettoday http://abc.com/api/tasks/getpending
如果方法名称只是“今天”,我可以进行此调用,只要我输入 [HttpGet] 属性即可。但前提是我没有第二个动作。这意味着如果我从第二种方法中删除 [HttpGet] 属性,并从方法名称中删除 'Get' 使其只是待处理,那么它就可以工作。
只要有两种获取方法,我就会收到此错误:
{"Message":"发生错误。","ExceptionMessage":"找到与请求匹配的多个操作:\r\nSystem.String TodaysTasks() on type TaskTrackerService.Controllers.TasksController\r\nSystem .String PendingTasks() on type TaskTrackerService.Controllers.TasksController","ExceptionType":"System.InvalidOperationException","StackTrace":" at 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 cancelToken)\r\n 在 System.Web.Http.Dispatcher .HttpControllerDispatcher.SendAsyncInternal(HttpRequestMessage 请求, CancellationToken cancelToken)\r\n 在 System.Web.Http.Dispatcher.HttpControllerDispatcher.SendAsync(HttpRequestMessage 请求, CancellationToken取消令牌)"}
【问题讨论】:
-
您可以根据需要进行任意数量的操作。可以贴代码吗?
-
您能展示一下您正在尝试的操作吗?您只能拥有一个具有相同方法签名的 GET,但可以拥有具有不同名称或签名(以及指向它们的路由)的任意数量的操作
-
请发布一些代码显示您的控制器操作和您的路由配置
-
这是 ASP.NET Web API 而不是 MVC,所以我会这样编辑问题。
-
我想通了 - 默认配置是 webapiconfig 而不是 routeconfig,它有 api/{controller}/{id} 而不是 {controller}/{action}/{id}。当我在那里添加动作时,效果很好。现在说得通了。谢谢!
标签: asp.net-web-api