ASP.NET Core获取正确查询字符串参数示例
目录
- 前言
- 表单域
- 解决方案
- 可空类型
- [BindRequired] 属性
前言
有网友在交流群中询问,如何获取查询字符串参数:
默认情况下,ASP.NET Core 的模型绑定以键值对的形式从 HTTP 请求中的以下列表中指示的顺序扫描源并获取数据:
表单域
- 请求正文
- 路由数据
- 查询字符串参数
- 上传的文件
因此,不需要任何配置,即可在 Action 中获取到查询字符串参数:
[HttpGet] public string Demo(int id, int price) { return $"id = {id}, price = {price}"; }
但是,使用查询字符串参数存在一个隐患,不传任何参数时,Demo方法也可以运行,因为模型绑定会为缺失的参数赋类型默认值:
由于 0 也是正确的int值,我们无法区分这到底是不是传递过来的参数值。
而price = 0可能会造成很严重的业务问题。
那要如何处理呢?
解决方案
可空类型
对于可空类型,默认值为null。因此只需检查它们是否为null,就可判断是否传递了查询字符串参数:
[HttpGet] public string Demo(int id, int? price) { if(price==null) throw new ArgumentNullException(nameof(price)); return $"id = {id}, price = {price}"; }
[BindRequired] 属性
上述方案虽然可以实现要求,但是代码改动较多。
另一种更简单的方案是使用绑定验证属性:
[HttpGet] public string Demo(int id, [BindRequired] int price) { return $"id = {id}, price = {price}"; }
与原始方法相比,执行增加一个属性即可。而且 Swagger 也可以正确识别这一属性:
以上就是ASP.NET Core获取正确查询字符串参数示例的详细内容,更多关于获取查询字符串参数的资料请关注我们其它相关文章!
相关推荐
-
ASP.NET Core使用EF查询数据
1.查询生命周期 在进入正题时候,我们先来了解EF Core查询的生命周期. 1.1LINQ查询会由Entity Framework Core处理并生成给数据库提供程序可处理的表示形式(说白了就是生成给数据库可识别数据形式). 发送的查询结果(查询表示形式)会被缓存,以便每次执行查询时无需进行1.1中处理. 1.2查询结果(查询表示形式)会传递到数据库提供程序 数据库提供程序会识别出查询的哪些部分可以在数据库中求值. 查询的这些部分会转换为特定数据库的查询语言(例如,关系数据库的T-SQL).
-
ASP.NET Core MVC获取请求的参数方法示例
前言 一次HTTP请求,就是一次标准IO操作.请求是I,是输入:响应式O,是输出.任何web开发框架,其实都是在干这两件事: 接受请求并进行解析获取参数 根据参数进行渲染并输出响应内容 所以我们学习一个框架,我认为最首要的是知道如何从请求中获取参数.http请求携带参数的地方主要有下面几个地方: URL Header Body 下面看看ASP.NET Core是如何从这几个位置获取参数的. 通过URL获取参数 通过URL传参是HTTP最最常用的办法.这里简单介绍下URL相关的知识.一个URL主要
-
详解ASP.NET Core实现强类型Configuration读取配置数据
前言 实现读取JSON文件几种方式,在项目中采取老办法简单粗暴,结果老大过来一看,恩,这样不太可取,行吧那我就用.NET Core中最新的方式诺,切记,适合的才是最好的,切勿懒. .NET Core读取JSON文件通过读取文件方式 当我将VS2015项目用VS2017打开后再添加控制器,此时会报错如下: 此时我们应该在该项目中的.csproj中添加如下这一句才能解决此问题: <ItemGroup> <DotNetCliToolReference Include="Microso
-
ASP.NET Core配置文件的获取和设置
在ASP.NET Core 中,应用程序配置数据可以使用JSON, XML 和 INI格式 和内置环境变量,命令行参数或内存中的集合. 1.如何获取和设置配置 ASP.NET Core配置系统针对以前的依赖于System.Configuration和XML配置文件(如Web.config)的ASP,NET 版本进行了重构.新的配置模型提供了精简高效的,能够通过检索多样化提供程序来获取基于键/值对配置的能力.应用程序和框架可以通过新的选择模式访问配置. 可以在ASP.NET Core应用程序中的S
-
ASP.NET Core获取正确查询字符串参数示例
目录 前言 表单域 解决方案 可空类型 [BindRequired] 属性 前言 有网友在交流群中询问,如何获取查询字符串参数: 默认情况下,ASP.NET Core 的模型绑定以键值对的形式从 HTTP 请求中的以下列表中指示的顺序扫描源并获取数据: 表单域 请求正文 路由数据 查询字符串参数 上传的文件 因此,不需要任何配置,即可在 Action 中获取到查询字符串参数: [HttpGet] public string Demo(int id, int price) { return $"i
-
javascript查询字符串参数的方法
本文实例讲述了javascript查询字符串参数的方法.分享给大家供大家参考.具体实现方法如下: 复制代码 代码如下: /* 解析查询字符串 返回包含所有参数的一个对象 */ function getQueryStringArgs(){ //取得查询字符串并去掉开头的问号 var qs = (location.search.length > 0 ? location.search.substring(1) : ''); //保存数据的对象 args
-
ASP.NET Core 2.0 带初始参数的中间件问题及解决方法
问题 如何在ASP.NET Core 2.0向中间件传入初始参数? 答案 在一个空项目中,创建一个POCO(Plain Old CLR Object)来保存中间件所需的参数: public class GreetingOptions { public string GreetAt { get; set; } public string GreetTo { get; set; } } 添加一个中间件: public class GreetingMiddleware { private readon
-
ASP.NET Core 使用Cookie验证身份的示例代码
ASP.NET Core 1.x提供了通过Cookie 中间件将用户主体序列化为一个加密的Cookie,然后在后续请求中验证Cookie并重新创建主体,并将其分配给HttpContext.User属性.如果您要提供自己的登录界面和用户数据库,可以使用作为独立功能的Cookie中间件. ASP.NET Core 2.x的一个主要变化是不再存在Cookie中间件.取而代之的是在Startup.cs文件中的Configure方法中的调用UseAuthentication方法会添加设置HttpConte
-
Python编程获取终端命令行参数示例
目录 实现步骤 命令行启动动态绑定端口号 代码实现 实现步骤 获取终端命令行参数,通过使用 sys.argv实现 1.导入sys模块 import sys 2.获取命令行参数 params = sys.argv print(params) print(params[1]) 获取到的为字符串类型,可能需要转换类型再使用 命令行启动动态绑定端口号 1.获取执行python程序的终端命令行参数 sys.argv 2.判断参数的类型,设置端口号必须是整型 if not sys.argv[1].isdig
-
ASP.NET Core构建OData查询Restful API
目录 前言: 一.建构 OData 实体模型 二.配置 OData 中间件 三.OData 实现 Restful API 查询 参考文档 前言: 本文使用 .NET Core SDK 3.1 的版本. OData 是 Open Data Protocol 的简写, OData 允许以简单和标准的方式创建和使用可查询和互操作的 Restful API. 官方文档访问 OData - Basic Tutorial 创建 Web API 项目,并引入 OData 相关的 NuGet 包: dotnet
-
浅谈ASP.NET Core 2.0 带初始参数的中间件(译)
问题 如何在ASP.NET Core 2.0向中间件传入初始参数? 答案 在一个空项目中,创建一个POCO(Plain Old CLR Object)来保存中间件所需的参数: public class GreetingOptions { public string GreetAt { get; set; } public string GreetTo { get; set; } } 添加一个中间件: public class GreetingMiddleware { private readon
-
asp.net core 获取 MacAddress 地址方法示例
本文告诉大家如何在 dotnet core 获取 Mac 地址 因为在 dotnetcore 是没有直接和硬件相关的,所以无法通过 WMI 的方法获取当前设备的 Mac 地址 但是在 dotnet core 可以使用下面的代码拿到本机所有的网卡地址,包括物理网卡和虚拟网卡 IPGlobalProperties computerProperties = IPGlobalProperties.GetIPGlobalProperties(); NetworkInterface[] nics = Net
-
django 使用 request 获取浏览器发送的参数示例代码
获取数据(四种方式) 1. url: 需要正则去匹配 url(r'^index/(num)/$',view.index) 匹配到的参数会自动传入对应的视图函数 也可以给匹配到的参数起名字?P<num> url(r'^index/(?P<num1>\d*)(?P<num2>\w*)$',) 使用url传参的时候,要么都使用位置参数,要么都使用给参数起名字的方式 也可以通过request.path获取到url然后获取相应的参数. 如访问127.0.0.1:8000/
随机推荐
- angular框架实现全选与单选chekbox的自定义
- hta实现涂鸦效果代码
- linux下开启php的sockets扩展支持实例
- Redis教程(九):主从复制配置实例
- javascript学习笔记(九)javascript中的原型(prototype)及原型链的继承方式
- VBS教程:VBscript属性-Description 属性
- 解决Alamofire库在iOS7下设置Head无效的问题
- 超级好用的一个php上传图片类(随机名,缩略图,加水印)
- Java正则表达式入门学习
- iOS应用设计模式开发中对简单工厂和工厂方法模式的运用
- 一个下载网页图片的shell脚本
- javascript轮播图算法
- php使用cookie实现记住用户名和密码实现代码
- Apache下MP3 防盗链的解决办法
- JavaScript-定时器0~9抽奖系统详解(代码)
- JavaScript中的View-Model使用介绍
- Python入门_学会创建并调用函数的方法
- Android 自定义View之边缘凹凸的优惠券效果的开发过程
- Laravel 6 将新增为指定队列任务设置中间件的功能
- python tkinter组件摆放方式详解