日期:2014-05-19  浏览次数:20403 次

求根据url修改参数后重新生成url的算法
求根据url修改参数后重新生成url的算法

要求,可根据不同的情况正确修改url的参数,重新生成新的url,比如

http://www.xxx.com/default.aspx?id=1
修改id的值为12
http://www.xxx.com/default.aspx?id=12


http://www.xxx.com/default.aspx?id=1&name=aa
修改id的值为12
http://www.xxx.com/default.aspx?id=12&name=aa

http://www.xxx.com/default.aspx
修改id的值为12,如果不存在则添加
http://www.xxx.com/default.aspx?id=12

http://www.xxx.com/default.aspx?name=aa
修改id的值为12,如果不存在则添加
http://www.xxx.com/default.aspx?name=aa&id=12

等等

谢谢

------解决方案--------------------
http://www.microsoft.com/china/msdn/library/webservices/asp.net/URLRewriting.mspx
------解决方案--------------------
获取地址进行字符串截取,这个有什么难度吗?判断id=的位置(有没有id=,没有添加&id=12),然后判断后面有没有&(有&就改id=到&中间的值为12),没有&地址长度,id=位置就可以替换id=的值.
------解决方案--------------------
最近看FormsAuthenticationModule,反射一下里面的代码,看看系统怎么来处理的。
if (strUrl.IndexOf( '? ') > = 0)
{
redirectPath = FormsAuthentication.RemoveQueryStringVariableFromUrl(strUrl, "ReturnUrl ") + "&ReturnUrl= " + HttpUtility.UrlEncode(str, context.Request.ContentEncoding);
}
else
{
redirectPath = strUrl + "?ReturnUrl= " + HttpUtility.UrlEncode(str, context.Request.ContentEncoding);
}
先判断是否有?,如果没有就直接加上参数,如果有就先去掉再加上。

internal static string RemoveQueryStringVariableFromUrl(string strUrl, string QSVar)
{
int posQ = strUrl.IndexOf( '? ');
if (posQ > = 0)
{
string sep = "& ";
string text2 = "? ";
string token = sep + QSVar + "= ";
RemoveQSVar(ref strUrl, posQ, token, sep, sep.Length);
token = text2 + QSVar + "= ";
RemoveQSVar(ref strUrl, posQ, token, sep, text2.Length);
sep = HttpUtility.UrlEncode( "& ");
text2 = HttpUtility.UrlEncode( "? ");
token = sep + HttpUtility.UrlEncode(QSVar + "= ");
RemoveQSVar(ref strUrl, posQ, token, sep, sep.Length);
token = text2 + HttpUtility.UrlEncode(QSVar + "= ");
RemoveQSVar(ref strUrl, posQ, token, sep, text2.Length);
}
return strUrl;
}