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