首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在.net核心3.1中使用[FromRoute]和[FromQuery]对对象进行模型绑定将返回null

在.NET Core 3.1中,使用[FromRoute][FromQuery]属性对对象进行模型绑定时,如果返回null,可能是由于以下几个原因:

基础概念

  • 模型绑定:ASP.NET Core MVC 中的一个功能,它将HTTP请求中的数据(如表单值、路由数据、查询字符串参数)映射到操作方法的参数上。
  • [FromRoute]:指示模型绑定器应从URL的路由数据中获取值。
  • [FromQuery]:指示模型绑定器应从查询字符串中获取值。

可能的原因及解决方法

  1. 路由模板不匹配
    • 确保你的路由模板与实际请求的URL匹配。
    • 示例:
    • 示例:
    • 如果请求的是/api/123?name=test,则id会正确绑定,但name不会,因为它不在路由模板中。
  • 查询字符串参数缺失
    • 确保查询字符串中包含了所有需要的参数。
    • 示例:
    • 示例:
    • 如果MyModel包含Name属性,请求应为/api?name=value
  • 模型属性名称不匹配
    • 确保模型属性的名称与请求中的参数名称完全一致(区分大小写)。
    • 示例:
    • 示例:
    • 请求应为/api?Name=value,而不是/api?name=value
  • 自定义模型绑定器问题
    • 如果使用了自定义模型绑定器,确保它正确实现了绑定逻辑。
  • 数据格式不正确
    • 确保传递的数据格式与模型属性的类型兼容。
    • 例如,如果模型属性是int类型,查询字符串中的值也必须是有效的整数。

示例代码

假设我们有一个简单的模型和一个控制器方法:

代码语言:txt
复制
public class User {
    public int Id { get; set; }
    public string Name { get; set; }
}

[ApiController]
[Route("api/[controller]")]
public class UsersController : ControllerBase {

    [HttpGet("{id}")]
    public IActionResult GetUser([FromRoute] int id, [FromQuery] User user) {
        if (user == null) {
            return BadRequest("User data from query string is missing or incorrect.");
        }
        // 处理逻辑...
        return Ok(user);
    }
}

正确的请求应该是:

代码语言:txt
复制
GET /api/users/123?Name=John

调试建议

  • 使用工具如Postman来测试API端点,确保发送的请求符合预期。
  • 查看应用程序的日志输出,可能会有关于模型绑定失败的详细信息。
  • 在控制器方法中添加断点,逐步检查传入的参数值。

通过以上步骤,通常可以定位并解决模型绑定返回null的问题。如果问题依然存在,可能需要进一步检查应用程序的其他部分,如中间件的影响或配置错误。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

.NET 云原生架构师训练营(模块二 基础巩固 MVC终结点)--学习笔记

2.3.4 Web API -- MVC终结点 MVC与MVVM 模型绑定 自定义模型绑定器 模型验证 返回数据处理 MVC与MVVM MVC ASP.NET Core MVC 概述:https://docs.microsoft.com...编写代码以检索这些值,并将其从字符串转换为 .NET 类型不仅繁琐,而且还容易出错。 模型绑定会自动化该过程。模型绑定系统: 从各种源(如路由数据、表单域和查询字符串)中检索数据。...Razor在方法参数和公共属性中向控制器和页面提供数据。 将字符串数据转换为 .NET 类型。 更新复杂类型的属性。 来源有哪些 [FromQuery] -从查询字符串获取值。...什么是模型验证 模型验证的特性与消息 FluentValidation 什么是模型验证 ASP.NET Core MVC 和页面中的模型验证 Razor:https://docs.microsoft.com...[Range]:验证属性值是否在指定的范围内。 [RegularExpression]:验证属性值是否与指定的正则表达式匹配。 [Required]:验证字段是否不为 null。

2.5K10

.NET 云原生架构师训练营(模块二 基础巩固 MVC终结点)--学习笔记

2.3.4 Web API -- MVC终结点 MVC与MVVM 模型绑定 自定义模型绑定器 模型验证 返回数据处理 MVC与MVVM MVC ASP.NET Core MVC 概述:https://docs.microsoft.com...编写代码以检索这些值,并将其从字符串转换为 .NET 类型不仅繁琐,而且还容易出错。 模型绑定会自动化该过程。 模型绑定系统: 从各种源(如路由数据、表单域和查询字符串)中检索数据。...Razor在方法参数和公共属性中向控制器和页面提供数据。 将字符串数据转换为 .NET 类型。 更新复杂类型的属性。 来源有哪些 [FromQuery] -从查询字符串获取值。...什么是模型验证 模型验证的特性与消息 FluentValidation 什么是模型验证 ASP.NET Core MVC 和页面中的模型验证 Razor:https://docs.microsoft.com...[Range]:验证属性值是否在指定的范围内。 [RegularExpression]:验证属性值是否与指定的正则表达式匹配。 [Required]:验证字段是否不为 null。

2.6K11
  • 小范笔记:ASP.NET Core API 基础知识与Axios前端提交数据

    [Bind] 指定要包含的前缀和属性,以进行模型绑定。 [Consumes] 指定某个操作接受的数据类型。 [Produces] 指定某个操作返回的数据类型。...id [FromRoute] 和 [FromQuery] 区别 以此 URL 为例 https://localhost:port/api/Default/fff?...[Bind] 指定要包含的前缀和属性,以进行模型绑定。 [Consumes] 指定某个操作接受的数据类型。 [Produces] 指定某个操作返回的数据类型。...ASP.NET Core 自动生成的可读写的 Controller ,默认都是使用 [Bind] 来绑定数据。 文档定义:用于对复杂类型的模型绑定。...Postman 进行,测试,发现必须使用 Json 形式,才能访问到这个 Action ,其它方式会直接 返回 错误。

    5.6K00

    ASP.NET Core MVC 如何获取请求的参数

    任何web开发框架,其实都是在干这两件事: 接受请求并进行解析获取参数 根据参数进行渲染并输出响应内容 所以我们学习一个框架,我认为最首要的是知道如何从请求中获取参数。...QueryString的键值对列表,所以可以通过它轻松获取QueryString上携带的参数。...Action的型参名称跟RouteAttribute模板的中的名称不一样,那么可以使用FromRoute强制指定解析的名称。...有了原始的数据,就可以通过反序列化等操作转换为模型,更简单的获取参数了。注意,ASP.NET Core想要读取这个对象,必须先调用Request.EnableBuffering()这个方法。...FromBodyAttribute可以把body的数据自动反序列化成型参的模型。

    3.3K20

    使用ASP.NET Core 3.x 构建 RESTful API - 4.2 过滤和搜索

    默认情况下ASP.NET Core 会使用 Complex Object Model Binder,它会把数据从Value Providers那里提取出来,而Value Providers的顺序是定义好的...[FromRoute] 用来推断Action的参数名和路由模板中的参数名一致的情况。 [FromQuery] 用来推断其它的Action参数。...按照这些规则,在Action的参数前面使用这些属性,就可以避免让我们手动去寻找绑定源。当默认的行为规则需要被重写的时候,也可以使用这些 Binding Source Attributes。...过滤 过滤集合的意思就是指根据条件限定返回的集合。 例如我想返回所有类型为国有企业的欧洲公司。则URI为:GET /api/companies?...但需要注意的是: 过滤和搜索这些参数并不是资源的一部分。 只允许针对资源的字段进行过滤。

    94120

    【ASP.NET Core 基础知识】--MVC框架--Models和数据绑定

    模型绑定: 模型绑定是将模型对象与HTTP请求中的数据进行关联的过程。 在控制器的动作方法中,可以通过参数接收模型对象,并通过模型绑定器将请求数据映射到该模型对象中。...或在Angular中使用的Reactive Forms)等,它们提供了一系列验证规则、方法和事件,使得在客户端对用户输入进行验证更加方便。...通过在页面上嵌入JavaScript代码或通过外部脚本文件,可以在用户输入数据之前对其进行验证。...4.2 自定义模型验证器 在ASP.NET Core MVC中,你可以通过自定义模型验证器来实现对模型中数据的自定义验证逻辑。...安全性和防范攻击: 始终对用户输入进行验证和编码,以防范跨站脚本(XSS)攻击、SQL注入等安全问题。使用内置的特性(例如 [ValidateAntiForgeryToken])来增加安全性。

    68510

    dotNET Core 3.X 使用 Web API

    HTTP 状态码 正确的返回状态码有助于客户端分析请求返回结果和问题排查,常用的状态码如下: ?...正确的做法应该是对参数做相关校验最终返回相应的 4XX 的状态码。...输入参数 模型绑定 接口的输入参数就是通过模型绑定将 HTTP 请求中的值映射到参数中,模型绑定有以下六种: [FromRoute]:通过路由的 URL 中取值,可以自动推断; [FromQuery]:...是自定义模型绑定器,可以对入参的类型进行一些转换,比如,参数中传递 001,002 这样的字符串,在接口中使用 IEnumerable来进行接收。...错误信息统一返回 之前的文章中有讲过使用过滤器的方式来做到结果的统一返回。这里介绍另一种方式,使用 ConfigureApiBehaviorOptions ,可以让我们自定义错误信息的返回内容和格式。

    1.6K30

    《ASP.ENT Core 与 RESTful API 开发实战》(第3章)-- 读书笔记(中)

    第 3 章 ASP.NET Core 核心特性 3.3 依赖注入 通常情况下,应用程序由多个组件构成,而组件与组件之间往往存在依赖关系 当我们需要获取数据时,通常的做法是实例化依赖的类,然后调用类里面的方法...在 ASP.NET Core MVC 框架中,除了 Controller、Model 和 Action 外,它还包括路由、模型绑定、模型验证和过滤器等功能 路由的主要功能是根据预先配置的路由信息对客户端传来的请求进行路由映射...FromHeader] [FromQuery] [FromServices] [FromRoute] [FromForm] [FromBody] 还有两个特性用于指明参数是否必须使用绑定: BindRequiredAttribute...(10)] [Url] [Range(1,5)] 在 Controller 内的 Action 中,要检查一个对象是否满足指定的条件,只要调用 ModelState.IsVaild 属性,其中 ModelState...[ServiceFilter] 特性与 [TypeFilter] 特性的区别是前者会从容器中获取过滤器实例,而后者不会,它使用 ObjectFactory 对指定的过滤器类型进行实例化,如果使用前者,

    1.2K10

    【ASP.NET Core 基础知识】--MVC框架--Views和Razor语法

    这使得在控制器中处理请求时,可以方便地使用和操作模型数据。 工作原理 模型绑定工作的基本原理是通过将HTTP请求中的数据(键值对)映射到应用程序中的模型对象。...这个映射过程是自动进行的,ASP.NET Core框架根据请求中的数据类型、名称和模型对象的属性进行匹配。...特性和注解 通过在模型属性上使用特性和注解,可以对模型的绑定行为进行更精确的控制。例如,可以使用 Required 特性指定某个属性为必填项。...} [FromForm], [FromQuery], [FromRoute] 使用 [FromForm], [FromQuery], [FromRoute] 特性明确指定模型绑定的数据来源。...例如,图片或其他大型媒体资源可以在页面加载完成后再进行加载。 合理使用 JavaScript 和 CSS 将JavaScript和CSS放置在页面底部,以减少对页面加载性能的影响。

    54220

    Spring Boot VS .NET 6

    Spring Boot 和 ASP.NET Core 都是企业中流行的 Web 框架, 对于喜欢 C# 的人会使用 ASP.NET Core, 而对于 Java 或 Kotlin 等基于 JVM 的语言...这里使用的框架版本分别是, Spring Boot (v2.5.5) 和 .NET 6, 让我们开始对比吧 1.控制器 控制器是负责处理传入请求的层, 为了在 Spring Boot 中定义一个控制器...[Route] 特性指定基本路径, 然后在控制器的每个方法上, 可以使用下面的特性来定义支持的 HTTP 方法和路径(可选)。....NET Core 和上面类似, 同样你可以使用下面的特性标记控制器的方法 •[FromQuery] → 从查询字符串绑定•[FromRoute] → 从路由数据绑定•[FromForm] → 从表单数据绑定...最后,Spring Boot 和 ASP.NET Core 都是非常成熟的框架,您都可以考虑使用, 希望对您有用!

    1.6K20

    聊聊HTTP请求那一些事_HttpWebRequest_一篇就够了

    在接手熟悉整理过程的,开始对一些公用方法进行封装打包,现在我就分享其中一个间的模块,那么就是对接口间的http请求处理封装。...在实际使用过中,get和post是两种最常见不过的方式,下面也主要围绕这两个方式介绍。本文中主要是针对HttpWebRequest的封装进行分享。...三、Content-Type与PAI常见参数接收方式对应关系 Content-Type 参数接收方式 使用类型 application/x-www-form-urlencoded FromQuery FromRoute...针对FromQuery参数:在封装中,通过字典方式交互 针对FromRoute参数:在封装中,通过list字符串集合交互 针对FromForm参数:在封装中,通过字典方式交互 针对FromBody参数:...在分装中,通过数据模型方式交互 在每一种交互方式上,根据编码方式、过期时间、返回类型,又重载了几个方法 下面直接上代码: get方式封装部分代码: using Newtonsoft.Json; using

    50450

    .netcore如何开发以太坊区块链示例 原

    本文描述了在dotNet核心中使用像以太坊这样的区块链平台的过程。目标受众是其他想要从以太坊开始的dotNet开发者。需要了解区块链。...我们看到它正在接收当前的区块链缓存,并且它的http端点正在localhost:8545上进行侦听。这很重要,因为我们需要Mist浏览器和其他应用程序使用IPC或RPC访问它。...在此示例中,所有以太坊交互都通过对象web3完成。在我们在Wei中取得余额之后,这就像是人民币的分数,然后是10^18因子而不是10^2。我们可以使用convert.FromWEi将其转换回以太币。...C#开发基于.Net的以太坊应用,包括账户管理、状态与交易、智能合约开发与交互、过滤器和交易等。...php以太坊,主要是介绍使用php进行智能合约开发交互,进行账号创建、交易、转账、代币开发以及过滤器和交易等内容。 以太坊入门教程,主要介绍智能合约与dapp应用开发,适合入门。

    1.4K31

    .net 温故知新【12】:Asp.Net Core WebAPI 中的Rest风格

    REST形式的API组织形态是资源和实体,请求的路由可以看出对资源的访问,规范统一接口自解释。 比如 https://xxxx/Student/1 用Get方法调用就是获取编号为1的学生。...ASP.NET Core WebAPI接口 在ASP.NET WebAPI中我们也能看到Rest的风格,理想很丰满,显示很骨干。...所以我们在设计接口的时候不用非要用Rest风格,我们可以靠近或者在特定的更适合使用Rest接口系统中使用。 本篇我们结合Rest看下接口如何设计和交互。...因此我们在实际设计中可能会进行Rest裁剪,我们既使用RPC的返回结果,同时多用准确的状态码,不用什么都返回200。...在上一篇中遗留的这个问题 .net 温故知新【11】:Asp.Net Core WebAPI 入门使用及介绍 所以我们在Controller中Route配置为[Controller]则不管方法接口名称是什么

    32940

    为什么ASP.NET Core的路由处理器可以使用一个任意类型的Delegate

    毫不夸张地说,路由是ASP.NET Core最为核心的部分。...请求处理器通过RequestDelegate来表示,但是当我们在进行路由编程的时候,却可以使用任意类型的Delegate作为处理器器,这一切的背后是如何实现的呢?...二、参数绑定 既然可以将一个任意类型的委托终结点的处理器,意味着路由系统在执行委托的时候能够自行绑定其输入参数。这里采用的参数绑定策略与ASP.NET MVC的“模型绑定”如出一辙。...Microsoft.AspNetCore.Mvc”命名空间下,因为它们原本是为了ASP.NET MVC下的模型绑定服务的。...定义在Controller类型中的Action方法一般返回会IActionResult(或者Task和ValueTask)对象。

    15610

    .NET云原生应用实践(二):Sticker微服务RESTful API的实现

    而另一方面,ORM的使用是有一定成本的,不仅仅是在代码执行效率上,在ORM配置、代码编程模型、模型映射、数据库初始化以及模型版本迁移等方面,都会有一些额外的开销,对于Sticker微服务而言,确实没有太大的必要...为了构图美观,类图中所有方法的参数和返回类型都进行了简化,在案例的代码中,各个方法的参数和返回类型都比图中所示稍许复杂一些。...API基于HTTP协议,是目前微服务间通信使用最为广泛的协议之一,由于它主要基于JSON数据格式,因此对前端开发和实现也是特别友好。...: ASP.NET Core Web API中的模型验证 ASP.NET Core Web API在一个Controller方法被调用前,是可以自动完成模型验证的。...在ASP.NET Core中使用JSON Patch还需要引入Newtonsoft JSON Input Formatter,请按照微软官方文档的步骤进行设置即可。

    4910

    以 C# WebApi Get 请求方式传递实体参数

    在 C# 开发中,Web API 是构建基于 HTTP 协议的服务的重要工具。通常,我们会使用 GET 请求来从服务器获取数据。在大多数情况下,GET 请求传递简单参数(例如字符串或整数)就足够了。...在“创建新 ASP.NET Core Web 应用程序”窗口中,选择“API”模板,点击“创建”。 项目创建完成后,我们将在该项目中添加一个控制器和一个包含实体参数的 GET 请求方法。...定义实体类 首先,我们定义一个简单的实体类 Person,包含姓名、年龄和地址字段。...] 特性指示 ASP.NET Core 从 URL 查询字符串中绑定参数值。...改进实现 使用自定义模型绑定 为了解决上述问题,我们可以创建一个自定义模型绑定器,将 URL 查询字符串绑定到一个复杂的对象上。

    2.5K10

    Vue路由Hash模式分析

    Vue路由Hash模式分析 Vue-router是Vue的核心组件,主要是作为Vue的路由管理器,Vue-router默认hash模式,即使用URL的Hash来模拟一个完整的URL,当URL改变时页面不会重新加载...请求中,即#及之后的字符不会被发送到服务端进行资源或数据的请求,其是用来指导浏览器动作的,对服务器端没有效果,因此改变Hash不会重新加载页面。...Vue-router的作用就是通过改变URL,在不重新请求页面的情况下,更新页面视图,从而动态加载与销毁组件,简单的说就是,虽然地址栏的地址改变了,但是并不是一个全新的页面,而是之前的页面某些部分进行了修改...函数能够使用路由映射表的几个对象,最后返回一个Matcher对象。...在初始化VueRouter时调用的init方法调用了路由切换以及调用了setupListeners方法实现了路由的切换的监听回调,注意此时并没有在HashHistory对象的构造函数中直接添加事件监听,

    1.9K52

    ASP.NET Core 一行代码搞定文件上传

    前言 在 Web 应用程序开发过程中,总是无法避免涉及到文件上传,这次我们来聊一聊怎么去实现一个简单方便可复用文件上传功能;通过创建自定义绑定模型来实现文件上传。...一、实现自定义绑定模型 1.1、 在 Asp.Net Core MVC 中,内置了很多种绑定模型,让我们可以很方便的去使用,比如下面常用的几种绑定模型 FromBodyAttribute FromFromAttribute...最后 SaveAs(string destinationDir = null) 通过传入指定目录,将文件保存,并返回保存后的文件绝对路径 三、上传文件 3.1、下面就定义一个简单的 API 接口,用于测试上传文件...对模型 UserFile 进行绑定,然后验证文件是否正确,接下来通过 file.SaveAs("/data/files/images"); 保存文件 3.3 、上传代码非常简单,几乎到了无法精简的程度...files.cnblogs.com/files/viter/Ron.UploadFile.zip 推荐阅读: 【微信自动化】使用c#实现微信自动化 细聊C# AsyncLocal如何在异步间进行数据流转

    36230
    领券