我不知道它是否有其他不同的默认配置,但是通过创建一个asp.net core 2.2项目和另一个asp.net core 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 core 2.2中运行良好:
https://localhost:xxxx/test/aaa/bbb/?prop3=ccc&prop4=ddd
但是,在asp.net core 3中,该对象为空。
如果我使用[FromRoute]
,它将仅获取prop1和prop2的值。
如果我使用[FromQuery]
,它将仅获取prop3和prop4的值。
我如何配置asp.net core 3,使其像asp.net core 2.2一样获得路由和查询字符串的值?
请注意,在asp.net core 2.2中,我尚未通知[FromRoute]
或[FromQuery]
现在对我来说是强制性的。
[确定,我发现问题出在使用ApiExplorer属性。
没有它,它完全可以按照我的意愿工作。
及时,使用ApiController属性可以得到相同的结果,但是,通过将SuppressInferBindingSourcesForParameters属性设置为true。
问题已解决。