And*_*w M 6 asp.net url query-string
我想动态填充当前请求的URI链接,但设置一个特定的查询字符串参数.所有其他查询字符串参数(如果有的话)应保持不变.我事先并不知道它们可能是什么.
例如,假设我想建立一个链接返回到当前页面,但与查询参数"valueOfInterest"一直被设置为"维布勒"(我是从aspx页面的代码隐藏在做这个,的.Net 3.5 C#FWIW).
例如,请求这两个中的任何一个:
/somepage.aspx
/somepage.aspx?valueOfInterest=sausages
Run Code Online (Sandbox Code Playgroud)
会成为:
/somepage.aspx?valueOfInterest=wibble
Run Code Online (Sandbox Code Playgroud)
最重要的(可能)请求:
/somepage.aspx?boring=something
/somepage.aspx?boring=something&valueOfInterest=sausages
Run Code Online (Sandbox Code Playgroud)
会保留无聊的参数成为:
/somepage.aspx?boring=something&valueOfInterest=wibble
Run Code Online (Sandbox Code Playgroud)
注意事项:如果asp.net中更优雅的东西更强大,我想避免字符串操作.但是,如果没有更优雅的东西,那就这样吧.
我做了(一点点)作业:我找到了一篇博文,建议将请求复制到本地HttpRequest对象中,但是仍然有查询字符串参数的只读集合.我也看过使用URI对象,但似乎没有查询字符串
只要[1]你有一个有效的URL开始(这似乎是合理的)[2]你确保你的新值('香肠')被正确转义.没有解析,唯一的字符串操作是连接参数.
编辑
这是C#:
UriBuilder u = new UriBuilder(Request.Url);
NameValueCollection nv = new NameValueCollection(Request.QueryString);
/* A NameValueColllection automatically makes room if this is a new
name. You don't have to check for NULL.
*/
nv["valueOfInterest"] = "sausages";
/* Appending to u.Query doesn't quite work, it
overloaded to add an extra '?' each time. Have to
use StringBuilder instead.
*/
StringBuilder newQuery = new StringBuilder();
foreach (string k in nv.Keys)
newQuery.AppendFormat("&{0}={1}", k, nv[k]);
u.Query = newQuery.ToString();
Response.Redirect(u.Uri.ToString());
Run Code Online (Sandbox Code Playgroud)