咨询区

  • 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 ?相关推荐

  1. 如何在Ubuntu中修改默认程序

    简介: 这个新手指南会向你展示如何在 Ubuntu Linux 中修改默认程序对于我来说,安装 VLC 多媒体播放器是安装完 Ubuntu 16.04 该做的事中最先做的几件事之一.为了能够使我双击一 ...

  2. 如何在Windows中修改您的名字和公司名?

    如何在Windows中修改您的名字和公司名? 安装Windows时,安装程序会提示输入注册用户的名字,所在公司等信息.安装完毕后,这些信息可以通过在打开我的电脑的" 属性"对话框中 ...

  3. Illustrator 教程:如何在 Illustrator 中修改形状?

    欢迎观看illustrator教程,小编带大家学习 illustrator 的基本工具和使用技巧,了解如何在 illustrator 中修改形状. illustrator 提供了很多工具和编辑方法帮助 ...

  4. 如何在MySQL中修改'max_questions'资源值?

    通常,会发生以下错误. 这是由于MySQL资源监控器功能," max_questions"表示"用户在一小时内可以执行的查询数". MySQL错误–超出了&qu ...

  5. 如何在Maya中修改已经绑定后的模型的法线

    前言:最近想把尼尔机械纪元的2B导入到UE中看看效果,可不知道是不是我解包的过程有问题,2B模型的裙子部分的发现有问题,而且裙子的模型还被拆分为了3个部分,直接软边是不管用的,而且已经绑定的模型就算修 ...

  6. 如何在 Xcode 中修改应用的名字

    找到 TARGETS 中的 Build Setting ,下拉找到 Packaging ,修改 Product Name 即可.

  7. 如何在eclipse中修改jsp默认编码

    在使用eclipse编程的时候,很多默认的编码都是iso-8859-1我们经常使用的,在eclipse中怎么修改jsp页面的默认编码呢. 第一步:打开eclipse,找到windows-->pr ...

  8. js点击按钮改变字体大小并给他颜色_如何在Elementor中修改文本的字体、大小、颜色、样式...

    本文将介绍Elementor网页编辑器中如何修改文本的字体.大小.颜色和样式. 原文首发于:https://loyseo.com/how-to-change-font-size-color-famil ...

  9. php格式转换成docx,如何在PHP中修改.doc或.docx文件

    我必须修改php中上传的.doc或.docx文件.我用谷歌搜索,但我只发现了如何阅读,却没有. 我想要原样的Word文件,并将文本放在该MS Word文件的底部. 怎么可能有人知道,请回复. 谢谢, ...

最新文章

  1. 手撕一个spirng IoC的过程
  2. CoreOS的Tectonic新发行版支持Kubernetes自我管理
  3. tabbar怎么些_vue 做的tabBar组件
  4. CS231n官方笔记授权翻译总集篇发布
  5. JZOJ__Day 2:【NOIP普及模拟】分数
  6. mybitys 动态sql 注释_mybatis注解动态sql详解
  7. Hive的两种操作模式
  8. 目标检测第2步:如何在Windows 10下安装Anaconda?
  9. 无人机内嵌计算机Manifold 2可部署容器化应用
  10. Linux中的终端、控制台、tty、pty等概念
  11. 如何量化考核技术人的KPI?
  12. css3制作八棱锥_CSS3制作各种形状图像
  13. 招聘|月薪20-40K|上海莱陆科技招高级机器人、​Android研发工程师
  14. 分享ssd固态硬盘分区装系统全过程!
  15. Windows Server 2016 搭建DHCP服务器(踩坑后总结)
  16. [实战] Android 发短信 - SMS
  17. 大数据主要学些什么?(大数据学习路线图)
  18. 比“5G有多快”更重要的,是5G将带来哪些改变
  19. OSChina 周日乱弹 —— 给我两个公主我也抱的起来
  20. python 散点图加趋势线

热门文章

  1. checking size of char… configure: error: cannot compute sizeof (char) 解决方法
  2. B2B行业网站电话销售应具备的精神
  3. 3、Eternal框架-控制器
  4. linux下无法umount移动设备
  5. IT基础设施最佳实践ITIL
  6. PHP Token(令牌)设计
  7. C# Global.asax.cs 定时任务
  8. [BZOJ 1072] 排列perm
  9. 【.NET特供-第三季】ASP.NET MVC系列:传统WebForm站点和MVC站点执行机制对照
  10. JIL 编译与 AOT 编译