U盘PE| w764位旗舰版下载 | U盘装win7系统 | U盘启动 |win7pe | win10下载 |加入收藏土豆PE官网U盘PE,U盘装win7系统,win7pe,U盘启动,U盘装系统,w764位旗舰版下载站!
当前位置:主页 > 帮助中心 > 帮助中心 >

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 运行时会尝试按顺序从所有源中拉取数据进行绑定。

Copyright © 2012-2014 Www.tudoupe.Com. 土豆启动 版权所有 意见建议:tdsky@tudoupe.com

土豆系统,土豆PE,win7系统下载,win7 64位旗舰版下载,u盘启动,u盘装系统,win10下载,win10正式版下载,win10 RTM正式版下载,win8下载,电脑蓝屏,IE11修复,网络受限,4K对齐,双系统,隐藏分区,系统安装不了,U盘装系统,笔记本装系统,台式机装系统,diskgenius运用,GHSOT装系统,U盘修复,U盘技巧,U盘速度,U盘不能格式化,U盘复制发生错误,U盘加密,U盘选购,开机黑屏,蓝屏,进不了系统,上不了网,打不开程序,点击无反应,系统设置,PE个性化,PE添加网络,PE维护系统

点击这里给我发消息