在 C# 中输出一个经过操作的 QueryString
本文关键字:经过 一个 操作 QueryString 输出 | 更新日期: 2023-09-27 17:47:22
使用以下代码,我得到了一个很好的格式化字符串:
Request.QueryString.ToString
给我这样的东西:&hello=worldµsoft=sucks
但是当我使用此代码将集合克隆到另一个对象(相同类型)时,我从 ToString() 方法中获取 Type()。
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
Response.Write(variables.ToString());
有没有一种更整洁的方法来输出它,而不是手动查找和构建字符串?
HttpValueCollection 是内部的,但您可以使用 "var" 来声明它,而无需使用 reflector 提取它。
var query = HttpUtility.ParseQueryString(Request.Url.Query);
query["Lang"] = myLanguage; // Add or replace param
string myNewUrl = Request.Url.AbsolutePath + "?" + query;
您还可以
使用 Reflector 将HttpValueCollection
类提取到您自己的类中,然后使用它。
因为它实际上是一个特殊的NVC,类型为HTTPValueCollection。所以当你打电话.ToString,它知道如何正确格式化它。
为什么要将 QueryString 集合复制到新的 NameValueCollection 中?
if (!string.IsNullOrEmpty(Request.QueryString["sid"]))
Request.QueryString.Remove("sid");
是的,我错了,它是只读的。所以本质是在你的 NameValuecollection 上使用 Remove 方法:
System.Collections.Specialized.NameValueCollection variables = new System.Collections.Specialized.NameValueCollection(Request.QueryString);
if (!string.IsNullOrEmpty(variables["sid"]))
variables.Remove("sid");
如果你不是绝对需要 NameValueCollection,字典提供了很多相同的语义:
var variables = Request.QueryString.OfType<DictionaryEntry>()
.Where(entry => entry.Key != "sid")
.ToDictionary(entry => entry.Key, entry => entry.Value);
Request.QueryString 实际上返回了一个 HttpValueCollection 对象(不幸的是,它是 System.Web 的内部对象,所以你不能它)。
尽管如此,HttpValueCollection 是从 NameValueCollection 派生的,它的 Remove() 方法保持不变,所以你应该能够调用 Request.QueryString.Remove("sid");