有一个api,通过Asp.Net Core实现。有两个控制器GoodsController
和StoreController
。在为商店分配商品后,有必要将用户重定向到商品的新版本。
此工作流程存在两个问题:
CreatedAtAction("Get", "goods", new { id = goodModel.Id }, goodModel)
给了我们... / api / goods?id = 123,我想要的是...... / api / goods / 123。 CreatedAtAction(...)
获得... / api / goods / 123路由,所以我决定再创建一个从查询中获取id的动作,但asp.net不是&#39 ;能够从GetAll()
告诉方法GetFromQuery([FromQuery] int id)
。有没有办法解决这些问题中的至少一个? 代码如下。
[Route("api/[controller]", Name = "GoodsController")]
public class GoodsController : Controller
{
[HttpGet]
public IEnumerable<GoodModel> GetAll()
{
//Returns goods
}
[HttpGet]
public IActionResult Get0FromQuery([FromQuery] int id)
{
//Returns good by id
}
[HttpGet]
[Route("{id:int}", Name = "GetGood")]
public GoodModel Get([FromRoute]int id)
{
//Returns good by id
}
}
[Route("api/[controller]")]
public class StoreController : Controller
{
[HttpPost]
[Route("goods")]
public IActionResult Post([FromBody] AssignGoodToStoreCommand command)
{
//Assign good to store, get goodModel
return CreatedAtAction("Get", "goods", new { id = goodModel.Id }, goodModel);
}
}