ASP.NET Core獲取正確查詢字符串參數示例
前言
有網友在交流群中詢問,如何獲取查詢字符串參數:
默認情況下,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獲取正確查詢字符串參數示例的詳細內容,更多關於獲取查詢字符串參數的資料請關註WalkonNet其它相關文章!
推薦閱讀:
- .net core 基於Hangfire+Mysql持久化實現定時任務配置方法
- 詳解如何在ASP.NET Core Web API中以三種方式返回數據
- ASP.NET Core MVC解決控制器同名Action請求不明確的問題
- asp.net core 中優雅的進行響應包裝的實現方法
- c# 如何對網絡信息進行相關設置(ip,dns,網關等)