【问题标题】:How to use [FromBody] and [FromQuery] attribute at the same time?如何同时使用 [FromBody] 和 [FromQuery] 属性?
【发布时间】:2021-10-08 12:27:54
【问题描述】:

在post请求中,我需要同时从查询字符串中获取参数。这是我的代码,但是不能工作


 [HttpPost("test")]
 public string Test(TestRequest request)
 {
      //TODO  ...
 }


    public class TestRequest
    {
        [FromHeader(Name = "id")]
        public string Id { get; set; }

        [FromQuery(Name = "traceId")]
        public string Trace { get; set; }

        public string Name { get; set; }

        [MaxLength(4)]
        public string Mark { get; set; }

        [Range(18, 35)]
        public int Age { get; set; }
    }

【问题讨论】:

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


【解决方案1】:

你必须把不同的参数放在方法签名中,所以它会像

[HttpPost("test/{traceId}")] // Note the query parameter 
public string Test(
    [FromHeader(Name = "id")]string id,
    [FromQuery(Name = "traceId")]string trace,
    [FromBody]Request request
    )
{
    // TODO...
}

public class Request
{
    public string Name { get; set; }
    public string Mark { get; set; }
    public int Age { get; set; }
}

位取决于您的实际请求的样子。这将从正文中读取请求对象,从标头中读取 id,从查询中读取 traceId。

【讨论】:

  • 是的,我知道这可以做到,但我想把参数放到同一个对象中。有什么想法吗?
  • 我不认为这是一个选择。您必须自己在控制器方法中将查询/标题数据放入对象中。
  • @ZUOXIANGE 您仍然可以在请求类中添加属性并为它们添加[ValidateNever] 属性。然后在验证请求模型和额外的两个参数之后,您可以将它们分配给模型。
猜你喜欢
  • 1970-01-01
  • 2016-12-08
  • 2021-01-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-17
  • 2019-08-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多