我得到了一个包含查询字符串的绝对 URI。我希望安全地将值附加到查询字符串,并更改现有参数。
我不希望使用 &foo=bar
,或者使用正则表达式,URI 转义很棘手。相反,我想使用一种我知道可以正确执行此操作并处理转义的内置机制。
我已经 found a ton全部使用 HttpUtility
的答案。然而,这是 ASP.NET Core,不再有 System.Web 程序集,因此不再有 HttpUtility
。
在面向核心运行时的情况下,在 ASP.NET Core 中执行此操作的合适方法是什么?
最佳答案
如果您使用的是 ASP.NET Core 1 或 2,则可以使用 Microsoft.AspNetCore.WebUtilities.QueryHelpers
执行此操作在Microsoft.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
不同在 System.Web 中,这将返回 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, ]}
关于c# - 在 .NET Core 中解析和修改查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29992848/