【问题标题】:.Net Core API : No Routes matched the supplied value.Net Core API:没有路由匹配提供的值
【发布时间】:2020-11-27 12:35:15
【问题描述】:

我已经这样做了好几个小时了。我在这里做错了什么?

BaseController 路由

[Route("api/v{v:apiVersion}/[controller]")]
[ApiController]
[Authorize]
public class BaseControllerV2 : ControllerBase
{
}

控制器路由

public class OrdersController : BaseControllerV2
{

private readonly IOrderService _iOrderService;

public OrdersController(IOrderService iOrderService)
{
    _iOrderService = iOrderService;
}

  

  /// <summary>
    /// Retrieve order details
    /// </summary>
    [HttpGet("{orderNo:int}", Name = nameof(GetOrderByOrderNo))]
    [ProducesResponseType(StatusCodes.Status200OK)]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    [ProducesResponseType(StatusCodes.Status404NotFound)]
    [ProducesResponseType(StatusCodes.Status500InternalServerError)]
    public async Task<ActionResult<Business.Models.V2.Order>> GetOrderByOrderNo([FromRoute]int orderNo, [BindRequired, FromQuery]int agencyNo, CancellationToken cancellationToken)
    {
        var result = await _iOrderService.GetOrderByOrderNo(orderNo, agencyNo, cancellationToken);

        if (result == null) return NotFound();

        return Ok(result);
    }

    /// <summary>
    /// Create quote
    /// </summary>
    [HttpPost(Name = nameof(CreateQuote))]
    [ProducesResponseType(StatusCodes.Status201Created)]
    [ProducesResponseType(StatusCodes.Status400BadRequest)]
    [ProducesResponseType(StatusCodes.Status500InternalServerError)]
    public async Task<ActionResult<Business.Models.V2.Order>> CreateQuote([FromBody]Business.Models.V2.Order order, CancellationToken cancellationToken)
    {
        var result = await _iOrderService.CreateQuote(order, cancellationToken);

        return CreatedAtAction(nameof(GetOrderByOrderNo), new { orderNo = result.OrderNo, agencyNo = result.AgencyNo, cancellationToken}, result);
    }

}

我已经尝试过其他相关问题的解决方案,但 CreatedAtAction 仍然找不到端点。

【问题讨论】:

  • 使用Route属性定义路由
  • 您已经在基本控制器上定义了 Route 属性。在派生控制器上定义它

标签: .net api .net-core asp.net-core-webapi


【解决方案1】:

看起来您的 GetOrderByOrderNo 只接受 1 个参数 HttpGet("{orderNo:int}",但您尝试传递 3 个,将其他 2 个参数添加到 HttpGet

【讨论】:

  • 我在端点上有一个查询参数设置。公共异步任务> GetOrderByOrderNo([FromRoute]int orderNo, [BindRequired, FromQuery]int AgencyNo, CancellationToken cancelToken)
【解决方案2】:

控制器路由中缺少一个参数 - {v:apiVersion},试试这个:

    public async Task<ActionResult<Business.Models.V2.Order>> CreateQuote([FromRoute] ApiVersion version, [FromBody]Business.Models.V2.Order order, CancellationToken cancellationToken)
    {
        var result = await _iOrderService.CreateQuote(order, cancellationToken);

        return CreatedAtAction(nameof(GetOrderByOrderNo), new { v = version.ToString(), orderNo = result.OrderNo, agencyNo = result.AgencyNo, cancellationToken}, result);
    }

您可以在此处找到示例:https://github.com/microsoft/aspnet-api-versioning/blob/master/samples/aspnetcore/BasicSample/Controllers/HelloWorldController.cs

【讨论】:

    猜你喜欢
    • 2017-01-20
    • 2019-02-03
    • 2018-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多