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
。