如何在路由解析中包括查询字符串,以允许具有相同方法,路由和查询字符串的多个操作?

神经元

我正在将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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档