【发布时间】:2017-10-29 06:55:04
【问题描述】:
这是我的控制器的样子:
[Route("api/[controller]")]
[Produces("application/json")]
public class ClientsController : Controller
{
private readonly IDataService _clients;
public ClientsController(IDataService dataService)
{
_clients = dataService;
}
[HttpPost]
public int Post([Bind("GivenName,FamilyName,GenderId,DateOfBirth,Id")] Client model)
{
// NB Implement.
return 0;
}
[HttpGet("api/Client/Get")]
[Produces(typeof(IEnumerable<Client>))]
public async Task<IActionResult> Get()
{
var clients = await _clients.ReadAsync();
return Ok(clients);
}
[HttpGet("api/Client/Get/{id:int}")]
[Produces(typeof(Client))]
public async Task<IActionResult> Get(int id)
{
var client = await _clients.ReadAsync(id);
if (client == null)
{
return NotFound();
}
return Ok(client);
}
[HttpGet("api/Client/Put")]
public void Put(int id, [FromBody]string value)
{
}
[HttpGet("api/Client/Delete/{id:int}")]
public void Delete(int id)
{
}
}
然而当我请求网址/api/Clients/Get时,如下:
json = await Client.GetStringAsync("api/Clients/Get");
我得到以下异常:
AmbiguousActionException:匹配多个动作。下列 动作匹配路由数据并满足所有约束:
Assessment.Web.Controllers.ClientsController.Index (Assessment.Web) Assessment.Web.Controllers.ClientsController.Details (Assessment.Web) Assessment.Web.Controllers.ClientsController.Create (Assessment.Web)
Client 是一个HttpClient。请注意,没有 GET 操作匹配路由数据,尽管名称相同,id。
这里有什么问题?
【问题讨论】:
-
mvc-5? - 看起来像 asp.net-core-mvc
-
@StephenMuecke 这是核心,我的错。我经常混淆 MVC 5 和 6。
-
这是
ClientsController的整个界面吗?异常消息中的 3 个操作方法不在代码示例中。如果所有内容都已发布,我们将需要查看您的其余路由配置,以确定哪个路由与api/Clients/Get的请求匹配。 -
@NightOwl888 这是唯一控制器的完整代码。在 API 中。原来这些错误消息来自客户端项目中的控制器。
标签: asp.net-mvc asp.net-core-mvc dotnet-httpclient attributerouting