Asp.Net Core 模型绑定 浅析

C# 技术使用笔记:ASP.NET Core 模型绑定的使用 ASP.NET Core 模型绑定是框架自动将 HTTP 请求中的数据(如 URL 路径、查询字符串、表单数据、请求体等)映射到控制器中的参数或模型对象的过程。它简化了开发者从请求中提取数据并将其转换为应用程序可以使用的格式的工作,使得代码更加简洁、易于维护且更符合 MVC(模型-视图-控制器)架构的设计理念。在 ASP.NET Core 中,特性可以用来指定模型绑定器的类型或绑定器的名称,从而实现对模型绑定过程的自定义。这为开发者提供了更灵活的控制方式,能够根据具体需求调整模型绑定的行为。指定绑定器类型。 阅读详情

Web开发中常需要在Controller的操作方法中获取客户端传递过来的值

注:Asp.Net Core Web Api

我们常常会这样写

[Route("TestApi")]
        [HttpPost]
        public string TestApi2([FromForm]string arg1, [FromForm]int arg2, [FromForm]DateTime date,[FromForm]float float1)
        {
            return "Success";
        }

在Controller的操作方法被执行时,由客户端传递的KV 键值对会被映射到方法的参数上,完成这个映射过程的操作就是模型绑定。

模型绑定的原理:

Asp.Net Core项目启动时,会初始化一系列内置的模型绑定器  IModelBinderProvider

当处理Http请求进行模型绑定时,会顺序调用注册的模型绑定器,根据需要需要使用匹配的模型绑定器,模型绑定内部会完成http请求数据到Controller 操作方法参数的转换和装配过程,这期间并没有做神秘的事情,仅仅是从原始Request对象中 Form 、QueryString 、Header等Http请求头,根据key获取原始数据 一般为 String和Stream类型,然后根据当前BindMode的ModeType进行类型转换,最后赋值给ModelBindingContext 的Result属性,剩下的工作(注入到操作方法对应参数)由Asp.Net Core完成。

以上就是Asp.Net Core模型绑定的主要过程。

 

自定义模型绑定器

1.建立一个类,实现 IModelBinder接口,在这个类里完成从Http请求中获取数据到模型的过程

public class MyModelBinder : IModelBinder
    {
        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            string key = bindingContext.ModelName;

            if (String.IsNullOrEmpty(key))
            {
                key = bindingContext.FieldName;
            }


            string val = bindingContext.HttpContext.Request.Form[key];

            if (String.IsNullOrEmpty(val))
            {
                val = bindingContext.HttpContext.Request.Query[key];
            }

            if (String.IsNullOrEmpty(val))
            {
                return Task.CompletedTask;
            }

            if (bindingContext.ModelType == typeof(string))
            {
                bindingContext.Model = val;
            }

            if (bindingContext.ModelType == typeof(int))
            {
                bindingContext.Model = int.Parse(val);
            }

            if (bindingContext.ModelType == typeof(long))
            {
                bindingContext.Model = long.Parse(val);
            }

            if (bindingContext.ModelType == typeof(float))
            {
                bindingContext.Model = float.Parse(val);
            }

            if (bindingContext.ModelType == typeof(double))
            {
                bindingContext.Model = double.Parse(val);
            }

            if (bindingContext.ModelType == typeof(short))
            {
                bindingContext.Model = short.Parse(val);
            }

            if (bindingContext.ModelType == typeof(DateTime))
            {
                bindingContext.Model = DateTime.Parse(val);
            }

            if (bindingContext.Model != null)
            {
                bindingContext.Result = ModelBindingResult.Success(bindingContext.Model);
            }

            if (bindingContext.ModelType == typeof(IFormFile))
            {
                bindingContext.Model = bindingContext.HttpContext.Request.Form.Files[0];
            }

            bindingContext.Result = ModelBindingResult.Success(bindingContext.Model);

            return Task.CompletedTask;
        }
    }

2.实现 IModelBinderProvider接口,包装上面实现的模型绑定器。

public class MyModelBinderProvider : IModelBinderProvider
    {
        public IModelBinder GetBinder(ModelBinderProviderContext context)
        {
            if (context == null)
            {
                throw new ArgumentNullException(nameof(context));
            }
            return new BinderTypeModelBinder(typeof(MyModelBinder));

        }
    }

3. 将我们的模型绑定提供程序 Provider注册到Asp.Net Core模型提供程序队列中。

public void ConfigureServices(IServiceCollection services)
        {
            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2)
                .AddMvcOptions(options =>
                {
                    options.ModelBinderProviders.Insert(0,new MyModelBinderProvider());
                });
        }

以上就是模型绑定的一般过程,其实Asp.net内置的一系列模型绑定已经能够满足我们的大部分需求了,不过我们总会有一些个性化的需求,所以作为框架会对一些功能开放扩展接口,让我们开发者参于进去,实现自己的需要。

可能有纰漏或错误的地方,望指正。

ASP.NET Core 入门教程 3、ASP.NET Core MVC路由入门 一、前言 1、本文主要内容 ASP.NET Core MVC路由工作原理概述 ASP.NET Core MVC带路径参数的路由示例 ASP.NET Core MVC固定前/后缀的路由示例 ASP.NET Core MVC正则表达式匹配路由示例 ASP.NET Core MVC路由约束与自定义路由约束 ASP.NET Core MVC RouteAttribute绑定式路由使用介绍 2、本教程环... 阅读详情

相关推荐

ASP.NET Core Web API 中使用 FromRoute 进行模型绑定

接下来,我们将通过具体的示例来展示如何在ASP.NET Core Web API中使用FromRoute来实现模型绑定。跟着我一起,一步步来,你会发现这一切并不难。📋通过上述步骤,你已经学会了如何在ASP.NET Core Web API中使用FromRoute来绑定路由参数。这不仅提高了API的灵活性,也让参数传递更加清晰和安全。希望这些内容对你有所帮助,并期待你在实践中取得更大的进步!📚🚀请注意,这里的代码示例仅供参考,实际使用时可能需要根据具体情况作出调整。

java专栏 797

asp.net core 模型绑定[FromBody]、[FromFrom]

[FromBody]特性参数的形式 Model: public class Test { public int id { get; set; } public String Name { get; set; } public List<String> images { get; set; } public...

weixin_34318956的博客 5653

STM32CubeMX的正交编码器encoder

由于最近干活遇到需要获取正交编码的功能,所以返回来研究一下STM32CubeMX的编码器功能,之前也更新过STM32的定时器功能,但是因为之前搞平衡车的正交编码器没有搞清楚原理,就直接用了脉冲输入功能草草了事,现在也算是为之前的年轻买单了,不过看到现有的Encoder说明都比较简单,所以就当是为开发者做贡献了,我研究清楚之后来一篇博客。

ASWaterbenben的博客 1万+

Asp.net core实战8: 模型绑定

Asp.net core自动实现模型绑定,从Form、Route Values、QueryString(三者有顺序)三个方面获取数据 简单类型单个参数的绑定 对于简单类型的数据可以直接获取到 对于路由模板:{controller}/{action}/{value} 若访问地址为:/Calculate/Square/5 那么,对应的数据是Calculate控制器,方法名称是...

『程序员·小李』的博客 1277

【opencv3 学习记录】第二章 读取显示保存视频

一:捕获视频函数 1.函数:cv2.VideoCapture(参数) 2.参数说明: (1)开启摄像头:参数一般为0,你可以通过设置成 1 或 者其他的来选择别的摄像头。 (2)从文件夹中获取视频:参数为字符串形式的文件路径 3.示例: cap = cv2.VideoCapture(0) #cap:存放参数 二:读取视频函数 1.函数:cap.read() 2.函数说明: (1)cap.read 中cap与捕获视频函数存放函数一致,可以自己命名.括号一般不用填写 (2)ret,f

m0_64448543的博客 3272

深入解析uncompyle6反编译pyc文件及常见错误修复指南

本文深入解析了使用uncompyle6工具反编译Python字节码文件(.pyc)的完整流程。针对实践中最高频的KeyError和Python版本范围限制两大错误,提供了详细的修复方案与步骤指南,并分享了处理复杂反编译结果的高级技巧与安全实践,是进行代码恢复、调试与分析的重要参考。

uber9的博客 534

ajax modelbinder,.NET Core 使用ModelBinder去掉所有参数的空格

一.前言通过各种姿势搜索都没搜到这方面的,唯一找到一个比较符合的,但是只适合简单类型,而且代码还没贴全,心累。。然后查看官网和源码之后,发现继承并实现 IModelBinder和IModelBinderProvider 即可。我这里是WebApi,所以要区分绑定属性[FromBody]、[FromForm]等。不同的绑定方法要实现不同的IModelBinder。二:正文api主要设计到的就是[Fr...

weixin_33190667的博客 655

光模块MCU开发全解析:从架构原理到固件调试实战

在高速光模块中,MCU并非传统印象里的核心处理器,而是负责数字诊断、闭环控制和协议管理的嵌入式管家。随着800G、1.6T模块的普及,MCU与DSP/SoC的协同、I2C总线通信、ADC采集、APC/TEC控制等低速域任务愈发关键。理解MCU的选型规格、启动流程和固件设计,是保障光模块稳定运行的基础。本文从光模块架构切入,剖析MCU的角色定位,详细拆解I2C从机实现、电芯片配置、校准与升级等工程细节,并结合实际调试经验梳理常见故障与排查思路,为嵌入式工程师提供一份可落地的光模块MCU开发指南。

weixin_29192365的博客 363

MVC Core的自定义模型绑定IModelBinder

在.net framework时MVC5下我们自定义模型绑定是继承DefaultModelBinder来重写BindModel实现的 如代码: /* * 描述:自定义ModelBinder进行字符串输入的处理去空格 */ using System; using System.Collections.Generic; using System.Linq; using System.Web;...

飞翔的学习笔记 2226

R语言使用caret包的confusionMatrix函数计算混淆矩阵、使用编写的自定义函数可视化混淆矩阵(confusion matrix)

R语言使用caret包的confusionMatrix函数计算混淆矩阵、使用编写的自定义函数可视化混淆矩阵(confusion matrix)

data+scenario+science+insight 3926

SAP 系统间信任关系配置全攻略:从 SM59 到 SMT1 的实践与风险控制

本文介绍了在SAP系统间配置信任关系的详细流程与最佳实践。文章以SAP Gateway与后端系统架构为场景,从SM59创建RFC目的地开始,到SMT1建立信任关系,再到授权对象S_RFCACL的配置,提供了完整的操作指南。重点包括:使用标准命名规范创建专用RFC连接、通过向导完成系统间信任登记、严格控制S_RFCACL授权范围等。文中还分享了真实项目案例、可复用的检查清单以及常见问题的排查思路,帮助用户实现稳定可靠的跨系统无密码调用,同时确保安全性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 323

在asp.net core 下定义统一的入参和出参格式

在使用.net core 开发Api的过程中,为了统一输入参数的格式,并增加一些全局必须含有的字段,比如:Code,Message,Lang等等,能采取的变通方式还是有几种的,然而都不够优...

dotNET跨平台 881

手把手教你学simulink(41.4)--逆变器电场景示例:基于Simulink的主从控制的多逆变器协同控制(Multi-Inverter Coordinated Control)

需求分析在现代电力系统中,分布式发电和储能系统的广泛应用使得多个逆变器并联运行成为常见的应用场景。为了确保多个逆变器之间的协同工作,实现系统的稳定性和高效性,通常采用主从控制(Master-Slave Control)策略。主从控制通过一个主控制器(Master)来协调多个从控制器(Slave),确保所有逆变器的输出电压、频率和功率分配符合预期目标。本项目将基于Simulink平台,开发一个多逆变器协同控制系统,采用主从控制策略,实现对多个逆变器的精确控制和优化。

MHD0815的博客 306

模型绑定ASP.NET Core中的JSON POST(你的.net core 为什么无法接收JSON参数)

有一天,当我出现一个关于模型绑定的问题时,我正在追赶最新的ASP.NET社区Standup,这个问题我之前没有接过(你可以在46:30左右看到这个问题)。它指出在ASP.NET Core(ASP.NET 5的新名称)中,您不能再简单地将JSON数据发布到MVC控制器并自动绑定它,您以前可以在ASP.NET 4 / MVC中执行此操作5。 在这篇文章中,我将展示如果您将项目转换为ASP.NET ...

秋枫苦雪 blog 1万+

CATIA 3DEXPERIENCE R2019x VBA开发介绍

CATIA 3DEXPERIENCE R2019x VBA开发介绍 一、 什么是VBA? 【VBA的官方解释】 VBA(Visual Basic for Applications)是VisualBasic的一种宏语言,是在其桌面应用程序中执行通用的自动化(OLE)任务的编程语言。主要能用来扩展Windows的应用程序功能,特别是MicrosoftOffice软件。它也可说是一种应用程式视觉化的 Basic 脚本。 CATIA提供了多种二次开发的接口,其中包括自动化对象编程(Automation)和

WorkMan的博客 5062

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

ASP.NET Core MVC/WebAPi 模型绑定探索

前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用到了,你再去看理论性的文章时才会豁然开朗,这是我一直以来学习技术的方法。本文我们来讲解.NET Core中的模型绑定。 话题 在ASP.NET Core之前MVC和Web APi被分

悠悠的博客 4414

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

ASP.NET Core 模型绑定

在C#中,特别是在ASP.NET Core中,模型绑定是一个将HTTP请求中的数据映射到C#对象的过程。它使得开发者能够方便地从请求中提取数据,而无需手动解析请求体、查询字符串、路由数据等。ASP.NET Core提供了多种特性(Attributes)来指定模型绑定的来源。

二十多岁的你迷茫又着急,想要车子,想要房子,想要享受旅行,你那么浮躁,拿什么看透人生! 1614

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

ASP.NET Core MVC 模型绑定实战教程:从基础到进阶

本文深入探讨ASP.NET Core MVC中的模型绑定机制,从基础概念到高级应用全面讲解。教程首先介绍模型绑定的工作原理,包括数据源优先级和自动类型转换;然后通过实战案例演示简单类型、复杂类型和集合类型的绑定方法。在高级应用方面,详细讲解如何创建和注册自定义模型绑定器,并介绍数据验证技术,包括数据注解和自定义验证逻辑的实现。最后,教程涵盖前端交互技巧和性能优化策略,如避免过度绑定和使用绑定特性。

caifox的博客 1200

Asp.Net Core 高级-模型绑定

模型绑定 定义 1.从各种源(路由、表单、查询字符串)中检索数据 2.将数据提供给方法参数和公共属性中的控制器 3.将字符串类型转换为.Net数据 4.更新复杂类型的属性 一般步骤 1.查找方法的第一个参数,得到它的类型和名称 2.查找HTTP的可用源,查找符合名称的数据 3.将该数据转换为该参数的类型 4.依次类推 注意:名称不区分大小写 5.调用这个方法,并将所有转换好...

飞鸟慕鱼的博客 2974

ASP.NET Core MVC 模型绑定用法及原理

前言 查询了一下关于 MVC 中的模型绑定,大部分都是关于如何使用的,以及模型绑定过程中的一些用法和概念,很少有关于模型绑定的内部机制实现的文章,本文就来讲解一下在 ASP.NET Core MVC 中模型绑定是如何实现的,以及它的一些其他用法。 模型绑定的用途 通常情况下,我们在使用 MVC 框架的时候不需要关注模型绑定的相关功能,因为它是集成到 MVC 框架内部的,当我们在浏览器访问一个

p77ll9l53x的博客 2902

ASP.NET Core MVC

MVC概述 asp.net core 中安装mvc services.AddControllersWithViews();//添加mvc控制器和视图服务 endpoints.MapControllerRoute(//终结点默认路由 依赖注入 配置服务将对象注入到容器 控制器构造时通过依赖注入从容器获取对象 控制器 视图 https://localhost:44369/Home/Details 默认路径下没有发现视图 视图发现 从控制器传递数据到视图 ...

随笔 4267

ASP.NET CORE 简介

<h1 id="aspnet-core-简介">ASP.NET CORE 简介</h1> <p>ASP.NET Core 是一个跨平台的高性能开源框架,用于生成启用云且连接 Internet 的新式应

yuyue59451222222的博客 2362

C# 技术使用笔记:Asp.net Core 中模型绑定详解

除了默认的数据源外,ASP.NET Core MVC 还允许开发人员自定义数据源,以满足特定的业务需求。创建自定义值提供程序:值提供程序是模型绑定系统中用于提供数据的组件。开发人员可以通过实现接口来创建自定义的值提供程序。自定义值提供程序可以从任意的数据源中获取数据,如自定义的配置文件、外部服务、缓存等,并将其提供给模型绑定器。例如,如果需要从一个自定义的配置文件中获取数据,可以创建一个自定义值提供程序,在其中读取配置文件的内容,并将其转换为模型绑定器可以使用的格式。注册自定义值提供程序工厂。

caifox的博客 1244

FlashMLA 实战:MLA 注意力加速指南

FlashMLA 是 DeepSeek 团队开源的 MLA 注意力加速内核库,为 DeepSeek-V3 系列提供稀疏/稠密注意力计算和 FP8 KV 缓存支持。本文带你看懂它的缓存格式、Seesaw 调度与 Crossover 共享机制,并给出最小调用示例。 ## 它到底解决了什么 MLA 把 K/V 压成低秩潜向量(latent 表示),但单 token 的 KV 仍有 576 维,128

gitblog_00428的博客 1072

ASP.NET Core模型绑定机制:数据验证与转换

你是否曾经在处理Web表单数据时遇到过类型转换失败、数据验证混乱的困扰?ASP.NET Core的模型绑定机制正是为了解决这些问题而设计的强大工具。本文将深入探讨ASP.NET Core模型绑定的核心机制,重点解析数据验证与转换的实现原理,帮助你构建更健壮的Web应用程序。 ## 模型绑定基础概念 ### 什么是模型绑定? 模型绑定(Model Binding)是ASP.NET Core M...

gitblog_00730的博客 894
上一篇: 用C语言写Python扩展 Windows
下一篇: Mybatis使用
IT回忆录
博客等级 码龄16年 42粉丝 100原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值