ASP.NET?Core獲取正確查詢字符串參數(shù)示例
前言
有網(wǎng)友在交流群中詢問,如何獲取查詢字符串參數(shù):
默認(rèn)情況下,ASP.NET Core 的模型綁定以鍵值對的形式從 HTTP 請求中的以下列表中指示的順序掃描源并獲取數(shù)據(jù):
表單域
- 請求正文
- 路由數(shù)據(jù)
- 查詢字符串參數(shù)
- 上傳的文件
因此,不需要任何配置,即可在 Action 中獲取到查詢字符串參數(shù):
[HttpGet] public string Demo(int id, int price) { return $"id = {id}, price = {price}"; }
但是,使用查詢字符串參數(shù)存在一個隱患,不傳任何參數(shù)時,Demo方法也可以運行,因為模型綁定會為缺失的參數(shù)賦類型默認(rèn)值:
由于 0 也是正確的int值,我們無法區(qū)分這到底是不是傳遞過來的參數(shù)值。
而price = 0可能會造成很嚴(yán)重的業(yè)務(wù)問題。
那要如何處理呢?
解決方案
可空類型
對于可空類型,默認(rèn)值為null。因此只需檢查它們是否為null,就可判斷是否傳遞了查詢字符串參數(shù):
[HttpGet] public string Demo(int id, int? price) { if(price==null) throw new ArgumentNullException(nameof(price)); return $"id = {id}, price = {price}"; }
[BindRequired] 屬性
上述方案雖然可以實現(xiàn)要求,但是代碼改動較多。
另一種更簡單的方案是使用綁定驗證屬性:
[HttpGet] public string Demo(int id, [BindRequired] int price) { return $"id = {id}, price = {price}"; }
與原始方法相比,執(zhí)行增加一個屬性即可。而且 Swagger 也可以正確識別這一屬性:
以上就是ASP.NET Core獲取正確查詢字符串參數(shù)示例的詳細內(nèi)容,更多關(guān)于獲取查詢字符串參數(shù)的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
ASP.NET性能優(yōu)化小結(jié)(ASP.NET&C#)
ASP.NET性能優(yōu)化,提高頁面的執(zhí)行效率與下載速度,等很多需要考慮的細節(jié),編程人員值得參考下。2011-01-01ASP.NET中MVC傳遞數(shù)據(jù)的幾種形式總結(jié)
這篇文章主要介紹了ASP.NET中MVC傳遞數(shù)據(jù)的幾種形式,以實例形式較為詳細的分析總結(jié)了MVC數(shù)據(jù)傳遞的相關(guān)技巧與注意事項,具有一定參考借鑒價值,需要的朋友可以參考下2015-10-10在vs2008中使用AJAX開發(fā).net 2.0下的Web程序的方法
最近做項目需要用到AJAX,但是工作需要必須使用.net 2.0版本;但發(fā)現(xiàn)如果項目為.net2.0版本則沒有Ajax(web.config已經(jīng)配置上ajax) ,、工具欄中并不出現(xiàn)Ajax選項卡. 而且新建頁面也沒有AJAX頁面;后來查了很多資料 發(fā)現(xiàn)了一種解決方法2011-06-06ASP.NET實現(xiàn)圖書管理系統(tǒng)的步驟詳解
這篇文章主要介紹了ASP.NET圖書管理系統(tǒng)簡單實現(xiàn)步驟,本文通過實例截圖展示的形式給大家介紹的非常詳細,具有一定的參考借鑒價值,需要的朋友可以參考下2019-12-12ASP.Net Core基于EF6、Unitwork、Autofac實現(xiàn)Repository模式
這篇文章介紹了ASP.Net Core基于EF6、Unitwork、Autofac實現(xiàn)Repository模式的方法,文中通過示例代碼介紹的非常詳細。對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-02-02