手机怎么做淘客网站,临汾做网站电话,柯林wap建站程序个人版,vps网站打开需要身份验证咨询区 vcsjones#xff1a;我有一个绝对路径的 url 包含了 querystring#xff0c;现在我想对 querystring 进行修改和添加#xff0c;我不想生硬的用字符串提取#xff0c;或者是 正则表达式#xff0c;而且还有恶心的 编码解码 问题#xff0c;所以我更希望用 .NETCor… 咨询区 vcsjones我有一个绝对路径的 url 包含了 querystring现在我想对 querystring 进行修改和添加我不想生硬的用字符串提取或者是 正则表达式而且还有恶心的 编码解码 问题所以我更希望用 .NETCore 中内建的工具提取而且也不需要操心 escape 问题。我知道在 Asp.NET 中有一个 HttpUtility 但在 .NETCore 中并没有 System.Web 无法实现请问我该如何处理呢回答区 vcsjones如果你用的是 ASP.NET Core 12 的话可以在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 下返回的是 IDictionarystring, StringValues 这个 value 表示string的集合所以当 querystring 中有多个重名时所有同名key都能提取出来。总的来说如果你想在 querystring 中添加参数可以使用 QueryHelpers 。var parametersToAdd new System.Collections.Generic.Dictionarystring, 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 Dictionarystring, StringValues();for (int i 0; i nameValues.Length; i2){qps.Add(nameValues[i], nameValues[i 1]);}return c.AddOrReplaceQueryParameters(qps);}public static string AddOrReplaceQueryParameters(this HttpContext c, Dictionarystring,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.PageIndex1);var prev Context.Request.HttpContext.AddOrReplaceQueryParameter(page,Model.PageIndex-1);点评区 WebUtilities 下的 QueryHelpers 确实比较好用学习了。