前言

有网友在交流群中询问,如何获取查询字符串参数:

默认情况下,ASP.NET Core 的模型绑定以键值对的形式从 HTTP 请求中的以下列表中指示的顺序扫描源并获取数据:

  1. 表单域

  2. 请求正文

  3. 路由数据

  4. 查询字符串参数

  5. 上传的文件

因此,不需要任何配置,即可在 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 也可以正确识别这一属性:

公众号回复【加群】,加入”MyIO 技术交流群“

ASP.NET Core 正确获取查询字符串参数相关推荐

  1. java 字符码查询_Java URL查询字符串参数的编码

    URLEncoder应该是走的路.您只需要记住,只编码单个查询字符串参数名称和/或值,而不是整个URL,确保不要查询字符串参数分隔符字符&也不是参数名称 – 值分隔符字符=. String q ...

  2. JavaScript高级程序设计读书笔记(第8章BOM之location对象查询字符串参数)

    为什么80%的码农都做不了架构师?>>> location对象查询字符串参数 //location.search返回从问号到URL末尾的所有内容function getQuerySt ...

  3. ASP.NET Core MVC 2.1 顶级参数验证

    本文讨论ASP.NET Core 2.1中与ASP.NET Core MVC / Web API控制器中的模型绑定相关的功能.虽说这是一个功能,但从我的角度来看,它更像是一个错误修复! 请注意,我使用 ...

  4. 面试官:如何在ASP.NET Core里给Action传递参数

    TIP:这篇文章属于入门级的文章,面向的读者是刚刚接触.NET Core的开发人员. 在ASP.NET Core 中给Action传参是在面试和实际开发中必定会遇到和使用到的,那么下面我们就来说说如何 ...

  5. 逐个访问URL的每个查询字符串参数

    下面介绍一个函数,用于处理location.search的结果,以解析查询字符串,然后返回包含所有参数的一个对象. 比如  www.baidu.com?q=javascript&num=10 ...

  6. 如何在 ASP.NET CORE 中获取客户端 IP ?

    咨询区 eadam: 在 ASP.NET 中我可以用 Request.ServerVariables["REMOTE_ADDR"] 来获取客户端IP地址,请问在 ASP.NET C ...

  7. [译]ASP.NET Core 2.0 带初始参数的中间件

    问题 如何在ASP.NET Core 2.0向中间件传入初始参数? 答案 在一个空项目中,创建一个POCO(Plain Old CLR Object)来保存中间件所需的参数: public class ...

  8. Asp.Net Core SignalR获取集线器实例,从集线器外部发送消息

    一.从控制器中获取IHubContext 操作发送消息 此种方式,常用简单 public class HomeController : Controller {private readonly IHu ...

  9. 在ASP.NET Core中获取客户端IP地址

    随着ASP.NET的发展,有不同的方式从请求中访问客户端IP地址.WebForms和MVC Web应用程序只是访问当前HTTP上下文的请求. var ip = HttpContext.Current. ...

最新文章

  1. android实现计算器功能吗,利用Android实现一个简单的计算器功能
  2. php 检测服务器网速_php测试用户网速
  3. 畅销书《简明的TensorFlow2》作者李卓桓开讲啦!
  4. groovy --不注意的小错误(java.lang.String.positive() is applicable)
  5. python验证卡普耶卡(D.R.Kaprekar)6174猜想
  6. mysql putty 备份_Linux下mysql数据库的备份-putty
  7. java面试线程必备知识点,怼死面试官,从我做起
  8. 多级队列调度算法可视化界面_C++实现操作系统调度算法(FSFS,SJF,RR,多级反馈队列算法)...
  9. 爱立信两大股东不满股价表现 欲撤换CEO卫翰思
  10. jquery系列教程6-ajax的应用全解
  11. ceph分布式存储简介
  12. matlab选择语句函数,Matlab基本语句和基本函数
  13. 管家婆财贸双全TOP系列服务器,管家婆财贸双全II
  14. python小波去噪实验
  15. 阵列天线方向图乘积定理的Python实现
  16. 用JAVA编程的数字时钟代码
  17. 华为P7开启USB调试方法
  18. 正定与半正定矩阵,判别的方法不能混用,否则出错
  19. 预估期刊2021年的影响因子
  20. oracle cmd窗口 命令行导入*.dmp文件

热门文章

  1. github一直发邮件,如何屏蔽
  2. ArchLinux开发环境第2辑——高效平铺式桌面i3个性化配置与美化
  3. rust休闲玩家_《Rust》坚持强制限定角色性别 玩家怒喷开发商傻蛋
  4. 韵语编年(之十二:1990——1994)
  5. 机械检索和计算机检索,手工检索和计算机检索的优缺点
  6. 大数据之Spark:Spark Core(1)
  7. 复习1:bool类型和char数组
  8. int a[ ]={0};
  9. 如何在网格上绘画【UE4】
  10. oracle 不使用结果缓存,为什么Oracle 12.1.0.2会跳过结果缓存表上的函数调用?