C# 为什么需要[FromQuery]属性?

C# 为什么需要[FromQuery]属性?,c#,api,.net-core,routing,asp.net-core-2.0,C#,Api,.net Core,Routing,Asp.net Core 2.0,我通过以下操作创建了一个api: [HttpGet("GetStuff/{Name}")] public ActionResult<string> GetStuff([FromRoute]GetStuffModel requestModel) { if (requestModel == null) return BadRequest(); var result = doStuff(); return Ok(result); } 现在我正在使用swagger来

我通过以下操作创建了一个api:

[HttpGet("GetStuff/{Name}")]
public ActionResult<string> GetStuff([FromRoute]GetStuffModel requestModel)
{
    if (requestModel == null) return BadRequest();
    var result = doStuff();
    return Ok(result);
}
现在我正在使用swagger来测试这一点,但基本上上面的方法并没有像我认为的那样有效。当我用swagger提交get请求并查看模型中的值时,我发现只捕获了名称。纬度和经度的值为0。但是,如果我将模型更改为:

public class GetStuffModel
{
    public string Name { get; set; }
    [FromQuery]
    public double Latitude { get; set; }
    [FromQuery]
    public double Longitude { get; set; }
    public double MyNumber { get; set; }
}
然后一切都被抓获。我的问题是,当我已经在控制器中声明了
[FromRoute]
时,为什么我必须指定
[FromQuery]


编辑:我还添加了
MyNumber
变量,对于
[FromRoute]
属性模型绑定器尝试绑定请求路由数据中的值,该变量也不需要
[FromQuery]
。在当前设置中,路由数据只包含
Name
的1个值(当然,这里也有
action
controller
值,但现在无关紧要),因此可以仅绑定
GetStuffModel
Name
属性(如果您向模型添加
字符串操作
属性,您将看到它也将被绑定)属性到模型属性它覆盖模型绑定行为,并允许从查询字符串绑定某些属性。在这种情况下,swagger添加
纬度
经度
作为查询参数,绑定工作正常。

@Bojan好吧,如果没有
[FromQuery],它对我不起作用
所以你们必须有一些我不知道的额外配置,我想我已经找到了原因,你们的解释很有道理。
public class GetStuffModel
{
    public string Name { get; set; }
    [FromQuery]
    public double Latitude { get; set; }
    [FromQuery]
    public double Longitude { get; set; }
    public double MyNumber { get; set; }
}