網站首頁 編程語言 正文
前言
有網友在交流群中詢問,如何獲取查詢字符串參數:
默認情況下,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 也可以正確識別這一屬性:
原文鏈接:https://blog.51cto.com/MyIO/5277998
相關推薦
- 2022-04-27 Shell中關于exit?0的那些坑_linux shell
- 2022-11-23 Golang?Defer基礎操作詳解_Golang
- 2022-08-21 Golang中slice刪除元素的性能對比_Golang
- 2022-08-03 基于PyQt5完成pdf轉word功能_python
- 2022-04-17 解決SpringBoot攔截器中無法依賴注入bean
- 2022-07-31 python虛擬機解釋器及運行過程_python
- 2022-04-14 解決:Failed to run File Watcher ‘goimports‘.The watc
- 2022-12-29 解決React?hook?'useState'?cannot?be?called?in?a?clas
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支