只有累積,沒有奇蹟

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 下載
Install-Package Microsoft.AspNetCore.WebUtilities -Version 2.2.0
Visual Studio 2019 專案點擊 Project 檔案可直接開啟,確認是否有安裝成功

產生 QueryString
QueryHelpers 使用  AddQueryString  產生 querystring 內容,使用方式相當簡單直接看 Sample Code 
string url = QueryHelpers.AddQueryString("/api/demo", "key1", "value1");
// result : api/demo?key1=value1
有多個參數需求時可以傳入 Dictionary
var queryParams = new Dictionary<string, string>()
{
    {"key1", "value1" },
    {"key2", "value2" },
    {"key3", "value3" }
};
url = QueryHelpers.AddQueryString("/api/demo/list", queryParams); 
// result : api/demo/list?key1=value1&key2=value2&key3=value3
輸入中文字,會自動 url Encode (覺得實用,好棒棒!!!)
url = QueryHelpers.AddQueryString("/api/demo/list", "高雄", "發大財");
// 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 方便後續操作
ar rawurl = "https://marcusblog.com/api/product/list?key1=value1&key2=value2&key3=value3&key1=value1&key5=";

var uri = new Uri(rawurl);
var baseUri = uri.GetComponents(UriComponents.Scheme | UriComponents.Host | UriComponents.Port | UriComponents.Path, UriFormat.UriEscaped);

var query = QueryHelpers.ParseQuery(uri.Query);

var items = query.SelectMany(x => x.Value, (col, value) => new KeyValuePair<string, string>(col.Key, value)).ToList();

// result : 
//      key1/value1
//      key2/value2
//      key3/value3

同場加映 - QueryBuilder
在 ASP.NET Core 中產生 QueryString 也可以透過 Microsoft.AspNetCore.Http.Extensions 中的  Querybuilder  方法,透過 Add 方法將參數帶入並使用  ToQueryString 輸出
var qs = new QueryBuilder();
qs.Add("key1", "test");
qs.Add("key2", "1111");
var result = qs.ToQueryString();

// result : ?key1=test&key2=1111
上面介紹兩種在 ASP.NET Core API 產生 QueryString 的方式,都可以達到目的,各位在使用上可以依據喜好來決定使用哪一種 :)

參考

0 意見:

張貼留言

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

Design by Anders Noren | Blogger Theme by NewBloggerThemes.com