Asp.Net Core中的CreatedAtAction和Routing

时间:2016-04-08 12:53:33

标签: asp.net-mvc asp.net-web-api asp.net-core asp.net-web-api-routing asp.net-core-1.0

有一个api,通过Asp.Net Core实现。有两个控制器GoodsControllerStoreController。在为商店分配商品后,有必要将用户重定向到商品的新版本。

此工作流程存在两个问题:

  1. CreatedAtAction("Get", "goods", new { id = goodModel.Id }, goodModel)给了我们... / api / goods?id = 123,我想要的是...... / api / goods / 123。
  2. 我无法从CreatedAtAction(...)获得... / api / goods / 123路由,所以我决定再创建一个从查询中获取id的动作,但asp.net不是&#39 ;能够从GetAll()告诉方法GetFromQuery([FromQuery] int id)
  3. 有没有办法解决这些问题中的至少一个? 代码如下。

    [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);
        }
    }
    

0 个答案:

没有答案