首页 > 解决方案 > 在 AspNetCore 2.2 的 ApiController 的单个操作中使用 FromRoute 和 FromQuery

问题描述

使用 ASP.NET Core 2.2 我有以下 ApiController 操作:

[ApiController]
public class PostController : Controller 
{

    [HttpGet("posts/{postId:int:min(1)}")]
    public async Task<IActionResult> GetByPostId([FromQuery]GetByPostIdRequest request) 
    {

    }
}

以下内容在哪里GetByPostIdRequest

public class GetByPostIdRequest 
{
    [FromRoute]
    public Int32 PostId { get; set; }
    public String LanguageCode { get; set; }
    public IncludeExpression Include { get; set; }
}

所有参数获取值的唯一方法是:

  1. FromQuery采取行动,所以我没有错误Unsupported Media Type

  2. FromRoute在 Request 类里面有绑定 PostId 。

难道没有其他方法可以做到这一点吗?

我尝试了以下方法,这对我来说是合乎逻辑的,但不起作用:

[ApiController]
public class PostController : Controller 
{

    [HttpGet("posts/{postId:int:min(1)}")]
    public async Task<IActionResult> GetByPostId([FromRoute, FromQuery]GetByPostIdRequest request) 
    {
    }

}

标签: c#asp.net-coreasp.net-core-mvcasp.net-core-2.2

解决方案


这是您可能正在寻找的包:HybridModelBinding

它通过使用[FromHybrid]属性解决了ASP.NET中混合模型绑定的问题。您的模型将与请求正文中的数据绑定,然后使用来自路由或查询字符串属性的数据进行更新。

[ApiController]
public class PostController : Controller 
{

    [HttpGet("posts/{postId:int:min(1)}")]
    public async Task<IActionResult> GetByPostId([FromHybrid]GetByPostIdRequest request) 
    {
    }

}

推荐阅读