如何在 .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 确实比较好用,学习了。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/295693.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VNCServer 配置

1、首先要配置的是服务端A 确认服务器端是否安装了vncserver使用rpm –qa vnc命令如果收到如下信息说明已经安装了vncserver&#xff0c;[rootlocalhost: ~]#rpm -qa |grep vncgtk-vnc-python-0.3.2-3.el5vnc-server-4.1.2-14.el5gtk-vnc-0.3.2-3.el5vnc-4.1.2-14.el5B从光盘找…

转 c#读写xml文件

已知有一个XML文件&#xff08;bookstore.xml&#xff09;如下&#xff1a;<?xml version"1.0" encoding"gb2312"?><bookstore> <book genre"fantasy" ISBN"2-3631-4"> <title>Oberons Legacy</titl…

招人!招人!这篇推文不要标题,只要你!

对&#xff0c;没错&#xff0c;就是这么直接超模君要要要要招人了因为我们知道很多有才华有能力的人并没有找到适合自己的工作比如你每当夜幕降临躺在床上仰望星空&#xff08;望着天花板&#xff09;的时候你的内心是不是都充满了迷茫&#xff1f;但&#xff0c;这并不是你的…

Android之INSTALL_FAILED_INSUFFICIENT_STORAG解决办法

INSTALL_FAILED_INSUFFICIENT_STORAG 有时候我们项目再次运行的时候,会出现INSTALL_FAILED_INSUFFICIENT_STORAG错误,先翻译下是什么意思,实例化失败由于空间不足,师傅告诉我重启手机,第一次还真有效,后来又有这个错误,然后我到网上找到了一些方法。 解决办法一…

用python爬虫抓站的一些技巧总结

转自http://obmem.info/?p476 1.最基本的抓站 import urllib2 content urllib2.urlopen(http://XXXX).read() -2.使用代理服务器这在某些情况下比较有用&#xff0c;比如IP被封了&#xff0c;或者比如IP访问的次数受到限制等等。 import urllib2 proxy_support urllib2.Prox…

第六届中国开源年会(COSCon'21)开心开源精彩收官

“ 点击蓝字 / 关注我们 ”第六届中国开源年会开心开源 Happy Hacking精彩收官&#xff01;开源社作为国内第一个专注于开源治理、国际接轨、社区发展&#xff0c;以及开源项目的开源社区&#xff0c;完全由志愿贡献于开源事业的个人成员组成。 由开源社主办的 “中国开源年会 …

matlab浮点数求绝对值_MATLAB仿真阵列天线切比雪夫综合法(附代码)

来源&#xff1a;cnblogs在《自适应天线与相控阵》这门课中&#xff0c;了解到了关于理想低副瓣阵列设计的一些方法&#xff0c;其中切比雪夫等副瓣阵列设计方法是一种基础的方法&#xff0c;故将其设计流程写成maltab程序供以后学习使用。在此分享一下。 此方法全称为道尔夫-切…

基于Redis的MQ中间件实现-目录

众所周知&#xff0c;Redis提供了发布订阅功能以及利用List数据结构可以实现消息队列的功能&#xff0c;本来这些也没什么技术难度&#xff0c;但是每次写这些程序时候&#xff0c;生产者和消费者都要写一些重复代码&#xff08;管理Redis&#xff09;和一些容易混乱的代码&…

丘成桐:中国学生基础真的比欧美学生好吗?

全世界只有3.14 % 的人关注了爆炸吧知识“中国学生基础好&#xff1f;这都是多少年来可怕的自我麻醉&#xff01;我不认为中国学生的基础知识学得有多好&#xff01;” “美国最好的学生真是好得不得了。应该这样比较&#xff0c;不管是美国&#xff0c;还是中国&#xff0c;…

WPF开发登录窗口之——添加密码完善登录窗口

WPF开发者QQ群&#xff1a; 340500857 | 微信群 目前人数太多&#xff0c;暂不开放01—代码如下一、添加类在“CustomControl”文件夹中加“PasswordInputBox.xaml”与文本输入框一样&#xff0c;唯一的区别是将文本框改成密码框&#xff1a;<UserControl x:Class"Lo…

Linux 汇编语言开发指南

http://www.ibm.com/developerworks/cn/linux/l-assembly/

页面闲置一段时间后,跳转

这里提供两个用JS实现的页面闲置后跳转的例子 <script> function count() {timer window.setInterval("aa()", 1000); }function resetcount() {sec0; } var timeout10;//设置到时时间为10秒 var sec0; function aa() {eslapetime.innerHTMLsec;if (sectimeo…

Android之PullToRefresh(ListView 、GridView 、WebView)使用详解和总结

PullToRefresh(ListView 、GridView 、WebView) 基本上每个安卓项目里面都有PullToRefresh的使用,然后我到网上去找了相关知识,很多都不全面,不详细,缺东缺西,然后我就到网上博客里面到处找,更具自己项目里面的使用,把PullToRefreshListView PullToRefreshGrid…

bat脚本中获取上级目录_使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件...

使用Python写一个可以监控Tomcat 运行的脚本,并且把.py文件转换成.exe文件 文章来源与博主本人的CSDN博客&#xff0c;博客地址&#xff1a;https://blog.csdn.net/weixin_43558566/article/details/101458567之前写过.bat 脚本用来监控tomcat运行宕机后自动重启的文章&#xf…

关于产品推荐的10个问题

很多零售商使用自己主动的产品推荐技术来添加他们的销售额和转化率。这些推荐的物品一般是商业网站上动态生成的。通常基于特定客户或一组客户的购买习惯。 Strands Recommender 是一个率先的动态生成产品推荐的提供者&#xff0c;我们近期採訪了其市场经理 Trevor Legwinski, …

史上最低估自己的天才科学家!预言自己的发现无用,没想到影响全世界,可他却在37岁..........

全世界只有3.14 % 的人关注了爆炸吧知识天妒英才真实存在赫兹在证明了电磁波存在后&#xff0c;他对自己的发现做了一个十分不自信的预测&#xff1a;“我认为我发现的无线电波不会有任何实际应用。”当然&#xff0c;也许是他太优秀了&#xff0c;干啥啥都行&#xff0c;所以觉…

VC2008的运行库问题。

有两种运行库&#xff0c;第一种包含有DEBUG版本的DLL和别的一些我不知道的文件。该运行库是从vc2008sp1补丁包里提出来的。第二种是微软官网上随处可以见到的&#xff0c;比第一个小&#xff0c;因为不包含DEBUG版本。 1&#xff09;Visual C 2008 x86 Runtime Setup VC_x86Ru…

poj 1328

1、贪心算法&#xff0c;刚开始不知道哪里搞错了&#xff0c;总是超时.... 1 #include<cstdio>2 #include<algorithm>3 #include<cstring>4 #include<queue>5 #include<math.h>6 #include <iostream>7 #include <string>8 #include …

阿里分布式中间件Seata从入门到精通

最近在写一本关于阿里巴巴分布式事务中间件 Seata 的电子书&#xff0c;Seata可以说是分布式事务中间件中最完善的了&#xff0c;包括了 AT、TCC、Saga、XA 四种模式&#xff0c;目前 Seata 已经更新到了 1.4.2 版本。这本电子书主要分成两部分&#xff0c;第一部分是入门学习&…

Android之Gradle Plugin Samples 之Gradle Library Projects

Gradle Library Projects Gradle 项目可以依赖于其它组件。这些组件可以是外部二进制包,或者是其它的 Gradle 项目。 在本例中, app/build.gradle 中有以下内容: dependencies { compile fileTree(dir: libs, include: [*.jar]) compile com.android.support:appcompat-v7:…