【发布时间】:2016-11-27 11:21:07
【问题描述】:
只要每个端点的参数不同,我就可以创建任何我想要的端点:
public IHttpActionResult GetFightersByWeightClass(string WeightClass)
...
public IHttpActionResult GetFighterByExactName(string NameEquals)
...
但是,一旦我尝试创建两个共享相同参数的不同名称的函数,我就无法同时使用这两个函数。我有两个不需要参数的端点,如下所示:
public class FighterController : ApiController
{
/// <summary>
/// Gets all fighters.
/// </summary>
/// <returns></returns>
[ActionName("GetAllFighters")]
public IEnumerable<Fighter> GetAllFighters()
{
return allFighters;
}
/// <summary>
/// Gets all fighters that are currently undefeated.
/// </summary>
/// <returns></returns>
[ActionName("GetAllUndefeatedFighters")]
public IHttpActionResult GetAllUndefeatedFighters()
{
var results = allFighters.FindAll(f => f.MMARecord.Losses == 0);
if (results == null)
{
return NotFound();
}
return Ok(results);
}
}
两个 URL 都返回这个:
{"Message":"An error has occurred.","ExceptionMessage":"Multiple actions were found that match the request: \r\nGetAllFighters on type MMAAPI.Controllers.FighterController\r\nGetAllUndefeatedFighters on type MMAAPI.Controllers.FighterController","ExceptionType":"System.InvalidOperationException","StackTrace":" at System.Web.Http.Controllers.ApiControllerActionSelector.ActionSelectorCacheItem.SelectAction(HttpControllerContext controllerContext)\r\n at System.Web.Http.Controllers.ApiControllerActionSelector.SelectAction(HttpControllerContext controllerContext)\r\n at System.Web.Http.ApiController.ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)\r\n at System.Web.Http.Dispatcher.HttpControllerDispatcher.<SendAsync>d__1.MoveNext()"}
不知道为什么会发生这种情况,它们每个都有自己独特的动作和函数名称,所以我认为它们会像这样工作......:
http://localhost:55865/api/fighter/GetAllUndefeatedFighters -- 只显示零损失的战士
http://localhost:55865/api/fighter/ -- 显示所有战士
...但两者都不起作用。如果我删除其中一个,它们就会起作用,反之亦然。因此,当它们都处于活动状态时,它们不工作。知道为什么吗?
【问题讨论】:
标签: c# asp.net-web-api