只有累積,沒有奇蹟

2023年9月3日 星期日

[NETCore] ASP.NET Core 建立與解析 QueryString 參數

說明
之前介紹過在 .NET 中可以使用 Utility.ParseQueryString 處理 Url 中的參數,傳送門 : 使用 ParseQueryString 取得網址參數,但所使用的 System.Web 命名空間僅存在於 ASP.NET Framework 不支援 ASP.NET Core,在搜尋更好的解決方案中發現了在 ASP.NET Core 提供新的 API - QueryHelpers 可以達到同樣效果,此篇介紹如何使用 queryHelpers 建立與解析 querystring 參數,若有問題歡迎留言討論

下載
QueryHelpers 從 .NET Core 1.0 RC2 就開始支援,命名空間為 Microsoft.AspNetCore.WebUtilities,使用前須先透過 Nuget Package Manager 下載
  1. Install-Package Microsoft.AspNetCore.WebUtilities -Version 2.2.0
Visual Studio 2019 專案點擊 Project 檔案可直接開啟,確認是否有安裝成功

產生 QueryString
QueryHelpers 使用  AddQueryString  產生 querystring 內容,使用方式相當簡單直接看 Sample Code 
  1. string url = QueryHelpers.AddQueryString("/api/demo", "key1", "value1");
  2. // result : api/demo?key1=value1
有多個參數需求時可以傳入 Dictionary
  1. var queryParams = new Dictionary<string, string>()
  2. {
  3. {"key1", "value1" },
  4. {"key2", "value2" },
  5. {"key3", "value3" }
  6. };
  7. url = QueryHelpers.AddQueryString("/api/demo/list", queryParams); 
  8. // result : api/demo/list?key1=value1&key2=value2&key3=value3
輸入中文字,會自動 url Encode (覺得實用,好棒棒!!!)
  1. url = QueryHelpers.AddQueryString("/api/demo/list", "高雄", "發大財");
  2. // result : api/demo/list?%E9%AB%98%E9%9B%84=%E7%99%BC%E5%A4%A7%E8%B2%A1

解析 QueryString
QueryHelpers 使用  ParseQuery  解析 Url 的 querystring 內容,以下範例為透過 ParseQuery 解析 QueryString 內容,並使用 selectMany 反序列化為 KeyValuePairs 方便後續操作
  1. ar rawurl = "https://marcusblog.com/api/product/list?key1=value1&key2=value2&key3=value3&key1=value1&key5=";
  2.  
  3. var uri = new Uri(rawurl);
  4. var baseUri = uri.GetComponents(UriComponents.Scheme | UriComponents.Host | UriComponents.Port | UriComponents.Path, UriFormat.UriEscaped);
  5.  
  6. var query = QueryHelpers.ParseQuery(uri.Query);
  7.  
  8. var items = query.SelectMany(x => x.Value, (col, value) => new KeyValuePair<string, string>(col.Key, value)).ToList();
  9.  
  10. // result :
  11. // key1/value1
  12. // key2/value2
  13. // key3/value3

同場加映 - QueryBuilder
在 ASP.NET Core 中產生 QueryString 也可以透過 Microsoft.AspNetCore.Http.Extensions 中的  Querybuilder  方法,透過 Add 方法將參數帶入並使用  ToQueryString 輸出
  1. var qs = new QueryBuilder();
  2. qs.Add("key1", "test");
  3. qs.Add("key2", "1111");
  4. var result = qs.ToQueryString();
  5. // result : ?key1=test&key2=1111
上面介紹兩種在 ASP.NET Core API 產生 QueryString 的方式,都可以達到目的,各位在使用上可以依據喜好來決定使用哪一種 :)

參考

Related Posts:

  • [UnitTest] Reflect.cs not found in NUnit問題 最近在新的專案寫 UnitTest 過程中,執行完後 Visual Studio 卻跳出 Source Not Fount : Reflect.cs not found 錯誤,但單元測試還是可以成功,如下圖 且透過 debug UnitTest 時發現測試的值也沒問題,經搜尋後發現是 Visual Studio 2017 IDE 設定問題,將,這篇文章簡單紀錄處理問題過程 處理方式 釐清問題 按下… Read More
  • [CheatSheets] ASP.NET 狀態比較表 ASP.NET 狀態比較表 幸運的找到一張圖說明ASP.NET的各種狀態(ASP.NET State Management)比較表,透過這張圖表可以更詳細的瞭解各狀態之間的關係比較 圖表來源 Bubblog,如有侵權或是不妥請告知 … Read More
  • [.NET] 伺服器認可通訊協定違規. Section=ResponseHeader Detail=CR 必須在 LF 之前問題 公司某個專案是使用 RestSharp 套件進行發送 Request 呼叫第三方的動作,今天在使用時忽然出現沒看過的錯誤訊息 伺服器認可通訊協定違規. Section=ResponseHeader Detail=CR 必須在 LF 之前 ,開發這麼多年來第一次看到此錯誤,筆記一下解決此問題的過程以表示對這問題的重視 處理方式 還原現場  先還原現場 Code 頗單純的,SendRequest 方法使用… Read More
  • [PowerShell] 設定 IIS - 建立 Application Pool、WebSite前言 PowerShell是微軟公司開發的任務自動化和組態管理框架,相信有接觸過 CI / CD 的人都是聽過且用過這工具,今天就來簡單介紹如何使用 PowerShell 來建立 Application Pool 跟 WebSite 的過程 指令說明 輸入指令 相關指令可以參考 WebAdministration # import module Import-Module WebAdministration cd IIS:\AppPoo… Read More
  • [WEB API] 使用 Swagger 自動產生 WebAPI 技術文件Swagger 是什麼 以下是 Swagger 官網說明 “ Swagger UI is a collection of HTML, Javascript, and CSS assets that dynamically generate beautiful documentation from a Swagger-compliant API “  Swagger 是一個可以將你的 API 接口變成可視化的服務,透過 Swag… Read More

0 意見:

張貼留言

Copyright © 2025 m@rcus 學習筆記 | Powered by Blogger

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com