gpt4 book ai didi

c# - 如何在 ASP.NET Core 2 中更改 CreatedAtAction 的路由格式?

转载 作者:太空宇宙 更新时间:2023-11-03 22:42:03 26 4
gpt4 key购买 nike

在 EF Core 2 中,CreatedAtAction 将参数附加为 api/sample?id=1。我如何配置它以返回 api/sample/1?

    [ApiController]
[Authorize]
[Route("api/[controller]")]
public class MyController : ControllerBase
{
[HttpGet("{id}")]
public async Task<IActionResult> Get(int id)
{
var entity = await service.GetAsync(id);
if (entity == null)
return NotFound(entity);
return Ok(entity);
}

[HttpPut]
// Other codes are omitted for brevity
public async Task<IActionResult> Create([FromBody] Entity entity)
{
await service.AddAsync(entity);
await service.SaveAsync();
return CreatedAtAction(action, new { id = entity.Id }, entity);
}
}

最佳答案

那是因为 Action 的路由模板。

很可能是因为默认的基于约定的路由。

这可以通过使用预期的路由模板在所需的操作上放置属性路由来解决

[Route(api/[controller])]
public class SampleController : Controller {
//GET api/sample/1
[HttpGet("{id}")]
public IActionResult Get(int id) {
//...
}

//POST api/sample
[HttpPost]
public IActionResult Post(Sample model) {
//...

return CreatedAtAction(nameof(Get), new { id = model.Id }, model);
}
}

并确保在创建结果时使用正确的操作名称。上面的示例使用了 Get 操作,因此在为创建的响应中的 Location 生成 URL 时将使用其路由模板。

关于c# - 如何在 ASP.NET Core 2 中更改 CreatedAtAction 的路由格式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51732443/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com