我遇到了一个非常奇怪的问题,在我的查询中,“++”作为文本的一部分。但是当我将查询stirng值分配给字符串时,++将变为两个空格。我如何准确地获得作为查询字符串传递的内容?
我观察到querystirng集合有“++”但是当我执行Request.QueryString [“search”]。ToString()“++”消失了,我在立即窗口中检查了。
我使用C#2.0
网址:/default.aspx?search = test ++
string t = Request.QueryString["search"].ToString();
答案 0 :(得分:8)
答案 1 :(得分:3)
'+' is reserved in query strings。
在查询组件中, 字符“;”,“/”,“?”,“:”,“@”, “&”,“=”,“+”,“,”和“$”是 保留
尝试使用UrlEncode对您的查询字符串进行编码。
答案 2 :(得分:2)
查询字符串中的加号转换为空格。如果您想要一个实际的加号而不是空格,请改用%2B
。
/default.aspx?search=test%2B%2B
如果你在代码中这样做,那么你应该使用UrlEncode
来编码查询字符串的这一部分。
答案 3 :(得分:1)
我不知道有办法将确切的文本传递给查询。 HTTP标准基本上说+
等同于空格字符,所以如果你想保留+
,你应该编码查询字符串,正如Chuck所说。
答案 4 :(得分:0)
我找到的唯一解决方案是在这篇帖子HERE中:
private string GetQueryStringValueFromRawUrl(string queryStringKey)
{
var currentUri = new Uri(HttpContext.Request.Url.Scheme + "://" +
HttpContext.Request.Url.Authority +
HttpContext.Request.RawUrl);
var queryStringCollection = HttpUtility.ParseQueryString((currentUri).Query);
return queryStringCollection.Get(queryStringKey);
}
答案 5 :(得分:0)
使用ASP.Net 2.0解决方案时,我必须执行以下操作:
private string GetParameterFromRawUrl(string parameter)
{
var rawUrl = Request.RawUrl;
int indexOfParam = rawUrl.IndexOf(parameter);
int indexOfNextParam = rawUrl.IndexOf('&', indexOfParam);
string result;
if (indexOfNextParam < 1)
{
result = rawUrl.Substring(indexOfParam);
}
else
{
result = rawUrl.Substring(indexOfParam, (indexOfNextParam-indexOfParam));
}
return result;
}