Querystring – 在c#中为querystring添加值

如何向querystring添加值?

我正在尝试这样做:

String currurl = HttpContext.Current.Request.RawUrl; var querystring = HttpContext.Current.Request.QueryString.ToString(); var PrintURL = currurl + (String.IsNullOrEmpty(querystring)) ? HttpContext.Current.Request.QueryString.Add("print", "y") : string.Empty; 

但我一直收到这个错误:

无法将类型’string’隐式转换为’bool’

我要做的就是获取当前url并将“pring = y”添加到查询字符串

那么,第一个问题可以用这个来解决:

 var PrintURL = currurl + (String.IsNullOrEmpty(querystring) ? HttpContext.Current.Request.QueryString.Add("print", "y") : string.Empty); 

从原始代码改变的只是将结束语从(String.IsNullOrEmpty(querystring)) (不需要的地方)移动到?:子句的末尾。 这使得它明确地明确了您要做的事情。
否则,编译器会尝试将String.IsNullOrEmpty(querystring) (这是一个bool )的结果连接到currUrl – 不正确,而不是首先想要的。

但是,您在HttpContext.Current.Request.QueryString.Add("print", "y")语句中遇到了第二个问题。 这将返回void ,而不是string 。 你需要修改三元表达式的这一部分,以便它返回一个字符串 – 你想做什么?

HttpContext.Current.Request.QueryString.Add(“print”,“y”)返回void,而不是字符串,因此您无法在三元表达式中使用该调用。 另外,在Request上添加查询字符串不会影响您的HTTPResponse,我假设这是您想要做的。 您需要制作新的URL并使用response.redirect让浏览器使用更新的查询字符串加载新的URL。

我想到了。

 String currurl = HttpContext.Current.Request.Url.ToString(); String querystring = null; // Check to make sure some query string variables // exist and if not add some and redirect. int iqs = currurl.IndexOf('?'); if (iqs == -1) { String redirecturl = currurl + "?print=y"; } 

不确定这是否是最干净的方式,但它的工作原理。 谢谢大家的帮助

你想要做的事情在这里有一些错误。

第一件事是QueryString集合是NameValueCollection。 Add方法具有void返回值。 因此,即使尝试分配QueryString.Add的结果也无法正常工作。

其次,您无法修改QueryString集合。 它是只读的。 对Velocity Reviews有一个回应,它正在谈论你正在尝试做什么。 您应该使用新值重定向用户,而不是尝试修改查询字符串。

 currurl + (String.IsNullOrEmpty(querystring) 

必须返回一个布尔值,所以条件必须不同。

第一个问题是你需要在你的语句中使用括号?

 var PrintURL = currurl + ((String.IsNullOrEmpty(querystring)) ? HttpContext.Current.Request.QueryString.Add("print", "y") : string.Empty); 

接下来的问题是HttpContext.Current.Request.QueryString.Add不会返回任何内容,因此:在另一方返回空字符串时返回void