クエリ文字列を含む絶対 URI が与えられています。クエリ文字列に値を安全に追加し、既存のパラメータを変更したいと考えています。
を追加したり、正規表現を使用したりすることは避けたいです&foo=bar
。URI エスケープは扱いにくいからです。むしろ、これを正しく実行し、エスケープを処理することがわかっている組み込みメカニズムを使用したいと思います。
私は見つかった 1つの トンすべて を使用する回答ですHttpUtility
。ただし、これは ASP.NET Core なので、System.Web アセンブリはもう存在せず、したがって も存在しませんHttpUtility
。
コア ランタイムをターゲットにしながら ASP.NET Core でこれを行う適切な方法は何ですか?
ベストアンサー1
ASP.NET Core 1または2を使用している場合はMicrosoft.AspNetCore.WebUtilities.QueryHelpers
、Microsoft.AspNetCore.Webユーティリティパッケージ。
ASP.NET Core 3.0 以降を使用している場合は、WebUtilities
ASP.NET SDK の一部となり、個別の nuget パッケージ参照は必要ありません。
これを辞書に解析するには:
var uri = new Uri(context.RedirectUri);
var queryDictionary = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(uri.Query);
System.Web とは異なり、これはASP.NET Core 1.x またはASP.NET Core 2.x 以降のParseQueryString
型の辞書を返すため、値は文字列のコレクションになります。これは、辞書が同じ名前を持つ複数のクエリ文字列パラメーターを処理する方法です。IDictionary<string, string[]>
IDictionary<string, StringValues>
クエリ文字列にパラメータを追加する場合は、別のメソッドを使用できますQueryHelpers
。
var parametersToAdd = new System.Collections.Generic.Dictionary<string, string> { { "resource", "foo" } };
var someUrl = "http://www.google.com";
var newUri = Microsoft.AspNetCore.WebUtilities.QueryHelpers.AddQueryString(someUrl, parametersToAdd);
.net core 2.2を使用すると、クエリ文字列を次のように取得できます。
var request = HttpContext.Request;
var query = request.Query;
foreach (var item in query){
Debug.WriteLine(item)
}
次のようなキーと値のペアのコレクションが取得されます。
[0] {[companyName, ]}
[1] {[shop, ]}
[2] {[breath, ]}
[3] {[hand, ]}
[4] {[eye, ]}
[5] {[firstAid, ]}
[6] {[eyeCleaner, ]}