如何在 .NETCore 中修改 QueryString ?

2023-11-05 21:18

本文主要是介绍如何在 .NETCore 中修改 QueryString ?,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

咨询区

  • vcsjones

我有一个绝对路径的 url 包含了 querystring,现在我想对 querystring 进行修改和添加,我不想生硬的用字符串提取,或者是 正则表达式,而且还有恶心的 编码解码 问题,所以我更希望用 .NETCore 中内建的工具提取,而且也不需要操心 escape 问题。

我知道在 Asp.NET 中有一个 HttpUtility ,但在 .NETCore 中并没有 System.Web ,无法实现,请问我该如何处理呢?

回答区

  • vcsjones

如果你用的是 ASP.NET Core 1,2 的话,可以在nuget上找一下 Microsoft.AspNetCore.WebUtilities.QueryHelpers 工具包,如果是 ASP.NET Core 3.0 以上版本, WebUtilities 已经内置到 ASP.NET SDK 了,可参考如下例子:

var uri = new Uri(context.RedirectUri);
var queryDictionary = Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery(uri.Query);

值得一提的是, 和 System.Web 下的 ParseQueryString 不同的是,ASP.NET Core 下返回的是 IDictionary<string, StringValues> ,这个 value 表示string的集合,所以当 querystring 中有多个重名时所有同名key都能提取出来。

总的来说,如果你想在 querystring 中添加参数,可以使用 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);

如果想获取,可以像下面这样。

var request = HttpContext.Request;
var query = request.Query;
foreach (var item in query){Debug.WriteLine(item) 
}

最后会得到如下的 key:value 键值对。

[0] {[companyName, ]}
[1] {[shop, ]}
[2] {[breath, ]}
[3] {[hand, ]}
[4] {[eye, ]}
[5] {[firstAid, ]}
[6] {[eyeCleaner, ]}
  • Gabriel Luca

我在 HttpContext 类中做了一个扩展,代码如下:

public static string AddOrReplaceQueryParameter(this HttpContext c, params string[] nameValues){if (nameValues.Length%2!=0){throw new Exception("nameValues: has more parameters then values or more values then parameters");}var qps = new Dictionary<string, StringValues>();for (int i = 0; i < nameValues.Length; i+=2){qps.Add(nameValues[i], nameValues[i + 1]);}return c.AddOrReplaceQueryParameters(qps);}public static string AddOrReplaceQueryParameters(this HttpContext c, Dictionary<string,StringValues> pvs){var request = c.Request;UriBuilder uriBuilder = new UriBuilder{Scheme = request.Scheme,Host = request.Host.Host,Port = request.Host.Port ?? 0,Path = request.Path.ToString(),Query = request.QueryString.ToString()};var queryParams = QueryHelpers.ParseQuery(uriBuilder.Query);foreach (var (p,v) in pvs){queryParams.Remove(p);queryParams.Add(p, v);}uriBuilder.Query = "";var allQPs = queryParams.ToDictionary(k => k.Key, k => k.Value.ToString());var url = QueryHelpers.AddQueryString(uriBuilder.ToString(),allQPs);return url;}

然后像下面这样使用。

var next = Context.Request.HttpContext.AddOrReplaceQueryParameter("page",Model.PageIndex+1+"");var prev = Context.Request.HttpContext.AddOrReplaceQueryParameter("page",Model.PageIndex-1+"");

点评区

WebUtilities 下的 QueryHelpers 确实比较好用,学习了。

这篇关于如何在 .NETCore 中修改 QueryString ?的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/352558

相关文章

Linux下修改hostname的三种实现方式

《Linux下修改hostname的三种实现方式》:本文主要介绍Linux下修改hostname的三种实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录linux下修改ho编程stname三种方式方法1:修改配置文件方法2:hFvEWEostnamectl命

C# 委托中 Invoke/BeginInvoke/EndInvoke和DynamicInvoke 方法的区别和联系

《C#委托中Invoke/BeginInvoke/EndInvoke和DynamicInvoke方法的区别和联系》在C#中,委托(Delegate)提供了多种调用方式,包括Invoke、Begi... 目录前言一、 Invoke方法1. 定义2. 特点3. 示例代码二、 BeginInvoke 和 EndI

Git如何修改已提交人的用户名和邮箱

《Git如何修改已提交人的用户名和邮箱》文章介绍了如何修改Git已提交人的用户名和邮箱,包括注意事项和具体步骤,确保操作正确无误... 目录git修改已提交人的用户名和邮箱前言第一步第二步总结git修改已提交人的用户名和邮箱前言需注意以下两点内容:需要在顶层目录下(php就是 .git 文件夹所在的目

C#中的 Dictionary常用操作

《C#中的Dictionary常用操作》C#中的DictionaryTKey,TValue是用于存储键值对集合的泛型类,允许通过键快速检索值,并且具有唯一键、动态大小和无序集合的特性,常用操作包括添... 目录基本概念Dictionary的基本结构Dictionary的主要特性Dictionary的常用操作

C# winform操作CSV格式文件

《C#winform操作CSV格式文件》这篇文章主要为大家详细介绍了C#在winform中的表格操作CSV格式文件的相关实例,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录实例一实例效果实现代码效果展示实例二实例效果完整代码实例一实例效果当在winform界面中点击读取按钮时 将csv中

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

C# string转unicode字符的实现

《C#string转unicode字符的实现》本文主要介绍了C#string转unicode字符的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随... 目录1. 获取字符串中每个字符的 Unicode 值示例代码:输出:2. 将 Unicode 值格式化

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

修改若依框架Token的过期时间问题

《修改若依框架Token的过期时间问题》本文介绍了如何修改若依框架中Token的过期时间,通过修改`application.yml`文件中的配置来实现,默认单位为分钟,希望此经验对大家有所帮助,也欢迎... 目录修改若依框架Token的过期时间修改Token的过期时间关闭Token的过期时js间总结修改若依

MySQL修改密码的四种实现方式

《MySQL修改密码的四种实现方式》文章主要介绍了如何使用命令行工具修改MySQL密码,包括使用`setpassword`命令和`mysqladmin`命令,此外,还详细描述了忘记密码时的处理方法,包... 目录mysql修改密码四种方式一、set password命令二、使用mysqladmin三、修改u