2011-04-15 94 views

回答

10

这很简单。我用System.Uri类来解析URL,然后取出q查询字符串参数,然后生成一个新的URL没有这个参数:

var url = new Uri("http://abc.com/qwe.aspx?q=DIEYeGJgNwvPSJ32ic1sY5x1ZYjOZTQZD9mjWl2EQJ8=&u=/foo/boo/kb"); 
var query = HttpUtility.ParseQueryString(url.Query); 
query.Remove("q"); 
UriBuilder ub = new UriBuilder(url); 
ub.Query = query.ToString(); 
var result = ub.Uri.ToString(); 

现在result持有价值:http://abc.com/qwe.aspx?u=/foo/boo/kb

+1

+1,我认为这是最干净和最安全的解决方案! – 2011-04-15 13:14:16

+1

这应该是删除查询参数最安全的方法。 – Zebi 2011-04-15 13:15:02

+0

太多的代码来做一件简单的事情。如果问题是那个URL是HttpRequest中找到的那个,那么这可能是一个矫枉过正的问题。我将投票给正则表达式解决方案。 – 2011-04-15 13:18:13

-1

如果Q是一个固定的参数....

str = str.Replace("q=DIEYeGJgNwvPSJ32ic1sY5x1ZYjOZTQZD9mjWl2EQJ8=", ""); 

否则我会做:

var qa = Request.QueryString; 
qa.Remove("q"); 
var queryString = qa.ToString(); 
+0

这没有帮助 - 参数*名称*是固定的,不是它的值! – 2011-04-15 13:08:48

+0

他说这是固定的。无论如何,我添加了我会为变量值查询字符串做的事情。 – tster 2011-04-15 13:10:23

+0

参数名称是固定的,而不是** q = **之后的字符串! – 2011-04-15 13:11:22

1

input = Regex.Replace(input, "q=[^&]+", "")将做这件事。

+1

你需要小心一点,因为像“uq = something”这样的参数将被无意中删除。 – 2011-04-15 13:10:39

+0

不会,“q =”不会匹配“qu =”。 – Antoine 2011-04-15 13:12:08

+0

@Marius,是不是正则表达式的'q ='部分阻止? – 2011-04-15 13:12:18

0

这些位置是否固定?您可以做一个IndexOf("q=")IndexOf("u=")并使用SubString两次删除零件。另一种方法是使用正则表达式。

0

也许这个URL来自一些请求,这意味着你在HttpRequest实例中有与HttpContext关联的查询字符串。

在这种情况下,你永远可以通过调用HttpContext.Current.Request.QueryString.Remove("q");

另一种解决方案将是一个由Alex建议删除“Q”查询字符串参数。