c# - 在 .NET Core 中解析和修改查询字符串

标签 c# asp.net asp.net-core

我得到了一个包含查询字符串的绝对 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/

相关文章:

c# - 如何以编程方式将 WPF Datagrid 绑定(bind)到自定义对象的 ObservableCollection?

c# - 在 web api 2 中仅序列化 DateTime 的日期部分

c# - 使用 signalR 时忽略对象属性

c# - EF Core开发过程中如何处理数据库变化?

c# - 多线程文件访问(加锁控制)

c# - 如何在生产部署中处理 Entity Framework 模型而不丢失以前的数据?

c# - 如何在 ASP.NET Web API 中使用缓存?

asp.net - VS2008 : Copy Web Site from command line

c# - 如何停止 Page.DataBind() 的递归调用?

asp.net-core - 我们可以在 template.serverless 文件中声明阶段名称吗?