1 句代码,搞定 ASP.NET Core 绑定多个源到同一个类
来源:http://www.tudoupe.com时间:2022-07-29
目录
问题
源码探究
柳暗花明
结论
问题
一群朋友想将路径中的信息绑定到Dto对象中:
所以您不需要在操作中定义一系列参数:
想法很好,对吧!
但在实践中,它没有达到预期的效果,并且与数据无关:

默认情况下,NET Core不能将其他不同的资源绑定到一个单一类。
那么我们能做点不同的事情来解决这个问题吗?
源码探究
首先,我们看看源代码,我们想看看FromRouteAttribute是如何工作的。
仅在InferParameterBindingInfoConvention类中找到一处调用:
因此,这个代码仍然用于生成异常信息!?
然而, 该 守则 的 前 一 部分 引起 我们 的 注意 :

这明显是在设置绑定源信息:
InferBindingSourceForParameter的实现代码如下:
单个类肯定是IsComplexTypeParameter, 这将让方法返回BindingSource.Body。
这解释了恰当的发生情况:通常,如果一个单一类被用作动作参数,原因是默认的由身体源绑定的。
那么您可以更改 ASP 吗? NET Core 是这个默认的绑定行为 吗?
柳暗花明
继续查看InferParameterBindingInfoConvention使用它,我们发现它被称作一个条件分支:
那么,如果让SuppressInferBindingSourcesForParameters设为true,会有什么效果呢?
下面是见证奇迹的时刻:

我们还尝试从其他来源传递数据,例如查询,它通常可以被绑定。
1 句代码,我们搞定了 ASP.NET Core 将多个来源绑定到同一个类的功能。
结论
后来,我们发布了官方文件( https://docs.Microsoft.com/zh-cn/aspnet/core/web-api/?View=aspnetcore-6.0) 找到解释:

当未明确指定参数时[FromXXX]时,ASP.NET Core 会进行绑定源推理,比如会推断单个类的绑定源为 Body。
设置 SuppressInferBindingSourcesForParameter 为 true,则会禁用绑定源推理。ASP.NET Core 运行时会尝试按顺序从所有源中拉取数据进行绑定。
下一篇:C#学习笔记(1)——vs下载
相关新闻
- 2022-08-04 WPF的由来
- 2022-08-04 Win11勒索软件防护怎么打开?Win11安
- 2022-08-04 Windows系统jdk的配置
- 2022-08-04 Windows10 OneNote怎么重新登录?如何重
- 2022-08-04 超好用的 Windows 效率工具推荐
- 2022-08-04 Windows如何在CMD或PowerShell中配置代理
- 2022-08-04 powershell和cmd对比
- 2022-08-04 【QT】Windows下QT下载安装
- 2022-08-04 windows下 C++ 实现类属性的get和set方
- 2022-08-04 Win11快速助手在哪里?Win11打开快速
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
