[asp.net] Fix for bug #648439. Do not prefix HttpRequest.ServerVariables ["QUERY_STRI...
[mono.git] / mcs / class / System.Web / System.Web / ServerVariablesCollection.cs
index 66ff4655b918ae496c17b2d7b5c054d3ec60c070..e94a6732e5008210c89b5a2b0601c6d54f352bc7 100644 (file)
@@ -35,6 +35,7 @@ using System.Collections.Specialized;
 using System.Runtime.Serialization;
 using System.Globalization;
 using System.Security.Permissions;
+using System.Web.Util;
 
 namespace System.Web
 {
@@ -43,6 +44,20 @@ namespace System.Web
                HttpRequest request;
                bool loaded;
 
+               string QueryString {
+                       get {
+                               string qs = _request.QueryStringRaw;
+
+                               if (String.IsNullOrEmpty (qs))
+                                       return qs;
+
+                               if (qs [0] == '?')
+                                       return qs.Substring (1);
+
+                               return qs;
+                       }
+               }
+               
                public ServerVariablesCollection(HttpRequest request) : base(request)
                {
                        IsReadOnly = true;
@@ -59,7 +74,7 @@ namespace System.Web
                        //
                        if (standard){
                                sb.Append ("HTTP_");
-                               sb.Append (key.ToUpper (CultureInfo.InvariantCulture).Replace ("-", "_"));
+                               sb.Append (key.ToUpper (Helpers.InvariantCulture).Replace ('-', '_'));
                                sb.Append (":");
                        } else {
                                sb.Append (key);
@@ -103,7 +118,7 @@ namespace System.Web
                                if (null != hvalue && hvalue.Length > 0) {
                                        hname = HttpWorkerRequest.GetKnownRequestHeaderName (i);
                                        if (null != hname && hname.Length > 0)
-                                               Add ("HTTP_" + hname.ToUpper (CultureInfo.InvariantCulture).Replace ('-', '_'), hvalue);
+                                               Add ("HTTP_" + hname.ToUpper (Helpers.InvariantCulture).Replace ('-', '_'), hvalue);
                                }
                        }
 
@@ -115,7 +130,7 @@ namespace System.Web
                                        if (hname == null)
                                                continue;
                                        hvalue = unknown [i][1];
-                                       Add ("HTTP_" + hname.ToUpper (CultureInfo.InvariantCulture).Replace ('-', '_'), hvalue);
+                                       Add ("HTTP_" + hname.ToUpper (Helpers.InvariantCulture).Replace ('-', '_'), hvalue);
                                }
                        }
                }
@@ -171,7 +186,7 @@ namespace System.Web
                        Add("LOCAL_ADDR", wr.GetLocalAddress());
                        Add("PATH_INFO", request.PathInfo);
                        Add("PATH_TRANSLATED", request.PhysicalPath);
-                       Add("QUERY_STRING", request.QueryStringRaw);
+                       Add("QUERY_STRING", QueryString);
                        Add("REMOTE_ADDR", request.UserHostAddress);
                        Add("REMOTE_HOST", request.UserHostName);
                        Add("REMOTE_PORT", wr.GetRemotePort ().ToString ());
@@ -202,7 +217,7 @@ namespace System.Web
                {
                        if ((name == null) || (this._request == null))
                                return null;
-                       name = name.ToUpper (CultureInfo.InvariantCulture);
+                       name = name.ToUpper (Helpers.InvariantCulture);
                        switch (name) {
                                case "AUTH_TYPE":
                                        if (null != _request.Context.User && _request.Context.User.Identity.IsAuthenticated)
@@ -215,7 +230,7 @@ namespace System.Web
                                        else
                                                return string.Empty;
                                case "QUERY_STRING":
-                                       return this._request.QueryStringRaw;
+                                       return QueryString;
                                case "PATH_INFO":
                                        return this._request.PathInfo;
                                case "PATH_TRANSLATED":