1. ホーム
  2. c#

[解決済み] .NET Coreでクエリ文字列を解析して変更する

2022-06-08 09:52:15

質問

私はクエリ文字列を含む絶対的なURIを与えられています。私は安全にクエリ文字列に値を追加し、既存のパラメータを変更するために探しています。

私は &foo=bar を追加したり、正規表現を使用したりすることは避けたいと思います。むしろ、私はこれを正しく行い、エスケープを処理することが分かっている組み込みのメカニズムを使用したいのです。

私は が見つかりました。 a トン を使用している回答は、すべて HttpUtility . しかし、ASP.NET Coreでは、System.Webアセンブリはもう存在しません。 HttpUtility .

ASP.NET Coreでコアランタイムをターゲットにしながらこれを行うには、どのような方法が適切でしょうか。

どのように解決するのですか?

ASP.NET Core 1 または 2 を使用している場合は、次のようにします。 Microsoft.AspNetCore.WebUtilities.QueryHelpers の中に マイクロソフト.AspNetCore.WebUtilities パッケージに含まれています。

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);

とは異なり ParseQueryString とは異なり、これは IDictionary<string, string[]> を、ASP.NET Core 1.xでは IDictionary<string, StringValues> のように、ASP.NET Core 2.x以上では、値は文字列のコレクションになります。このように、同じ名前の複数のクエリ文字列パラメータを辞書で処理することができます。

クエリ文字列の上にパラメータを追加したい場合は、別のメソッドで 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, ]}