编辑:
事实证明,Swagger(swashbuckle)必须承担责任,它没有使用正确的customerId填充URL。它应该将请求发送到像 /API/customers/1/orders 这样的东西,但它实际上将请求发送到 /API/customers/{customerid}/orders,而不是使用真实的值填充customerid。
x1c 0d1x的数据
那么,如何才能让swagger将真实的值插入到url中呢?
原件:
我有一个 CustomersController 和一个 OrdersController,CustomersController 的路由是 /API/customers,它是 OrdersController(/API/customers/{customerId}/orders)路由的前缀。
[Route("api/[controller]")]
[ApiController]
public class CustomersController : ControllerBase
{
[HttpGet]
public async Task<IActionResult> List()
{
return Ok();
}
}
[Route("api/customers/{customerId:int}/[controller]")]
[ApiController]
public class OrdersController : ControllerBase
{
[HttpGet]
public async Task<IActionResult> ListOrders(int customerId)
{
return Ok();
}
}
字符串
swagger站点(SwashBuckle)正确显示了API。但是,当我尝试使用 /api/customers/{customerid}/orders 时,它返回404。我应该如何配置路由以使API工作?
我可以想到一些变通办法,将ListOrders放在 CustomersController 中。
public class CustomersController : ControllerBase
{
[HttpGet("{customerId:int}/orders"]
public async Task<IActionResult> ListOrders(int customerId)
{
return Ok();
}
}
型
但这不是我真正想要的,我想让CustomersController只处理与客户相关的东西。
1条答案
按热度按时间9bfwbjaz1#
解决方案是将路径参数customerId更改为customerid(现在一切都是空的)。然后swagger(SwashBuckle)将正确地将路径参数设置为url。
字符串