【问题标题】:Use FromRoute and FromQuery in single action of ApiController in AspNetCore 2.2在 AspNetCore 2.2 的 ApiController 的单个操作中使用 FromRoute 和 FromQuery
【发布时间】:2019-09-21 22:49:20
【问题描述】:

使用 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. 在 Request 类中有 FromRoute 来绑定 PostId。

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

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

[ApiController]
public class PostController : Controller 
{

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

}

【问题讨论】:

  • post ID的action方法中的另一个参数怎么样?
  • 我相信缓存最好使用 url “posts/postId”,然后使用参数来塑造响应......例如,对于“categories/categoryId/posts”。没有?
  • 我的意思是动作方法中的另一个参数,例如[FromQuery]GetByPostIdRequest request, [FromRoute]int postId
  • 我明白了......关键是我的服务层只接受一类类型的请求,所以我需要将 ID 添加到控制器内的请求中,这样就多了一步。
  • 你的服务层和你的 UI 层不是一回事,也许一开始就不应该使用相同的模型。

标签: c# asp.net-core asp.net-core-mvc asp.net-core-2.2


【解决方案1】:

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

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

[ApiController]
public class PostController : Controller 
{

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-08
    • 1970-01-01
    • 1970-01-01
    • 2018-11-27
    • 1970-01-01
    • 2020-01-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多