C# 在AspNetCore 2.2中ApiController的单个操作中使用FromRoute和FromQuery

C# 在AspNetCore 2.2中ApiController的单个操作中使用FromRoute和FromQuery,c#,asp.net-core,asp.net-core-mvc,asp.net-core-2.2,C#,Asp.net Core,Asp.net Core Mvc,Asp.net Core 2.2,使用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) {

使用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) 
    {

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

  • 使
    FromQuery
    生效,这样我就不会出现错误
    不支持的媒体类型

  • FromRoute
    放在请求类中以绑定PostId

  • 难道没有别的办法吗

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

    [ApiController]
    public class PostController : Controller 
    {
    
        [HttpGet("posts/{postId:int:min(1)}")]
        public async Task<IActionResult> GetByPostId([FromRoute, FromQuery]GetByPostIdRequest request) 
        {
        }
    
    }
    
    [ApiController]
    公共类后控制器:控制器
    {
    [HttpGet(“posts/{postId:int:min(1)}”)]
    公共异步任务GetByPostId([FromRoute,FromQuery]GetByPostRequest请求)
    {
    }
    }
    
    post ID的action方法中的另一个参数如何?我认为缓存最好使用url“posts/post ID”,然后使用参数来塑造响应。。。例如,“类别/类别ID/职位”也是如此。否?我是指动作方法中的另一个参数,例如,
    [FromQuery]GetByPostdRequest请求,[FromRoute]int postId
    我明白了。。。关键是我的服务层只接受一类类型的请求,因此我需要在控制器内部向请求添加ID,这样就可以多做一步。您的服务层和UI层不是一回事,可能一开始就不应该使用相同的模型。关于post的action方法中的另一个参数如何ID?我认为缓存最好使用url“posts/postId”,然后使用参数来塑造响应。。。例如,“类别/类别ID/职位”也是如此。否?我是指动作方法中的另一个参数,例如,
    [FromQuery]GetByPostdRequest请求,[FromRoute]int postId
    我明白了。。。关键是我的服务层只接受一类类型的请求,因此我需要在控制器内部向请求添加ID,这样就可以多做一步。您的服务层和UI层不是同一件事,可能不应该首先使用相同的模型。
    [ApiController]
    public class PostController : Controller 
    {
    
        [HttpGet("posts/{postId:int:min(1)}")]
        public async Task<IActionResult> GetByPostId([FromRoute, FromQuery]GetByPostIdRequest request) 
        {
        }
    
    }