我正在将ASP.NET MVC(.NET Framework)应用程序转换为ASP.NET Core MVC。严格来说,这是一次转换,我无法进行任何重大更改,因此无法更改任何路径或方法。我无法匹配ASP.NET Core MVC中的相同功能。
工作的ASP.NET MVC:
[HttpPut]
[Route("status")]
public async Task<IHttpActionResult> UpdateStatusByOrderGuid([FromUri] Guid orderGUID, [FromBody] POST_Status linkStatusModel)
{
}
[HttpPut]
[Route("status")]
public async Task<IHttpActionResult> UpdateStatusById([FromUri] Guid id, [FromBody] POST_Status linkStatusModel)
{
}
ASP.NET Core MVC无法正常工作。
我收到一个错误:
Microsoft.AspNetCore.Routing.Matching.AmbiguousMatchException:该请求匹配了多个端点
码:
[HttpPut]
[Route("status")]
public async Task<IActionResult> UpdateStatusByOrderGuid([FromQuery] Guid orderGUID, [FromBody] POST_Status statusModel)
{
}
[HttpPut]
[Route("status")]
public async Task<IActionResult> UpdateStatusById([FromQuery] Guid id, [FromBody] POST_Status statusModel)
{
}
在解析哪个路由时,我需要包括查询参数。它应与基于是否orderGUID
或者id
是在查询字符串。
谢谢。
为什么不使用单个端点呢?您不需要传递Guid,因为它是GET操作,因此您可以传递字符串并稍后进行转换。这样,您可以发送一个参数或其他参数。
[HttpPut]
[Route("status")]
public async Task<IActionResult> UpdateStatus([FromBody] POST_Status statusModel, [FromQuery] string orderGUID = null, [FromQuery] string id = null)
{
if (!string.IsNullOrEmpty(orderGUID))
{
// UpdateStatusByOrderGuid implementation here
// Guid guid = Guid.Parse(orderGUID);
}
else if (!string.IsNullOrEmpty(id))
{
// UpdateStatusById implementation here
// Guid guid = Guid.Parse(id);
}
else
{
throw new ArgumentException("No valid GUID.");
}
}
该端点应与您指定的两种方案都兼容。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句