如何从url路径获取Id

Ska*_*uba 0 c# .net-core asp.net-core asp.net-core-webapi .net-6.0

我的问题可能看起来很简单,但我被这个问题困扰了一段时间。

代码控制器:

[Route("api/ReceiptOrders/{receiptOrderNo}/[controller]")]
[ApiController]
public class ReceiptPositionsController : ControllerBase
{
    [HttpPost("{orderNo}")]
    public async Task<IActionResult> PostReceiptOrderPositions(
        [FromBody] IEnumerable<ReceiptPositionForCreationDto> receiptPositions)
    {
        var receiptOrder = await _repositoryManager.ReceiptOrder.GetReceiptOrderByOrderNoAsync(receiptOrderNo, false);
        //More code here...
    }
}
Run Code Online (Sandbox Code Playgroud)

网址:https://localhost:7164/api/ReceiptOrders/RO-20220731-4/ReceiptPositions

我的问题是:如何获取 ReceiptOrderNo(在本例中为 RO-20220731-4)?我需要它来填充“GetReceiptOrderByOrderNoAsync”方法。

gun*_*171 5

通过在方法中添加另一个参数来绑定到模板条目。此外,从方法的属性中删除模板。方法的模板附加到类的模板中,因此您当前拥有的模板将不匹配。

[Route("api/ReceiptOrders/{receiptOrderNo}/[controller]")]
[ApiController]
public class ReceiptPositionsController : ControllerBase
{
    [HttpPost] // <--- no template
    public async Task<IActionResult> PostReceiptOrderPositions(
        [FromRoute] string receiptOrderNo,  // <---- new parameter
        [FromBody] IEnumerable<ReceiptPositionForCreationDto> receiptPositions)
    {
        // ... use "receiptOrderNo"
    }
Run Code Online (Sandbox Code Playgroud)

您不需要,但我认为这是一个好主意,因为它明确了应该从哪里读取值,而不是意外地从查询字符串或其他源读取 [FromRoute]