带有特殊字符的C#上的Querystring问题

时间:2010-12-07 18:46:00

标签: c# asp.net query-string

我遇到了一个非常奇怪的问题,在我的查询中,“++”作为文本的一部分。但是当我将查询stirng值分配给字符串时,++将变为两个空格。我如何准确地获得作为查询字符串传递的内容?

我观察到querystirng集合有“++”但是当我执行Request.QueryString [“search”]。ToString()“++”消失了,我在立即窗口中检查了。

我使用C#2.0

网址:/default.aspx?search = test ++

string t = Request.QueryString["search"].ToString();

6 个答案:

答案 0 :(得分:8)

您应该使用UrlEncodeUrlDecode

只要您将用户输入的数据插入查询字符串,就应该使用这些方法。

答案 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;
    }