同一模型中的 FromRoute 和 FromQuery 在 asp net core 2.2 和 3.0 之间有不同的结果

FromRoute and FromQuery in the same model has different results between asp net core 2.2 and 3.0

我不知道它是否有任何不同的默认配置,但是通过创建一个 asp.net 核心 2.2 项目和另一个 asp.net 核心 3.0 项目,我在模型绑定中得到了不同的结果。

public class Dto
{
     public string Prop1 { get; set; }

     public string Prop2 { get; set; }      

     public string Prop3 { get; set; }                  

     public string Prop4 { get; set; }

}
[HttpGet("test/{prop1:alpha}/{prop2:alpha}")]
public ActionResult<Result> Test(Dto dto)
{
}

当调用 url 时,上述代码在 asp.net 核心 2.2 中完美运行:

https://localhost:xxxx/test/aaa/bbb/?prop3=ccc&prop4=ddd

但是,在 asp.net 核心 3 中,对象为空。

如果我使用 [FromRoute] 它只会获取 prop1 和 prop2 的值。

如果我使用 [FromQuery] 它只会获取 prop3 和 prop4 的值。

如何配置 asp.net core 3 以便它像 asp.net core 2.2 一样获取路由和查询字符串的值?

请注意,在 asp.net 核心 2.2 中,我没有通知 [FromRoute][FromQuery] 在我看来现在是强制性的。

好的,我发现问题是指使用ApiExplorer属性。

没有它,它完全按照我的意愿工作。

及时,使用 ApiController 属性可以获得相同的结果,但是,通过将 SuppressInferBindingSourcesForParameters 属性 设置为 true。

问题已解决。