2012-10-19 65 views
3

我使用流閱讀器來閱讀context.Request.InputStream的結束,以及看起來像通過解析POST

"Gamestart=true&GamePlayer=8&CurrentDay=Monday&..." 

字符串結束了,會是什麼最efficent /「乾淨」的方式來解析在C#控制檯?

回答

9

您可以使用HttpUtility.ParseQueryString

小樣本:

string queryString = "Gamestart=true&GamePlayer=8&CurrentDay=Monday"; //Hardcoded just for example 
NameValueCollection qscoll = HttpUtility.ParseQueryString(querystring); 

foreach (String k in qscoll.AllKeys) 
{ 
    //Prints result in output window. 
    System.Diagnostics.Debug.WriteLine(k + " = " + qscoll[k]); 
} 
0

我知道這是一個有點殭屍後,但我想我會添加其他的答案,因爲HttpUtility增加了一個集引用(System.Web),這可能是不希望有的。

using System.Net; 
    using System.Text.RegularExpressions; 

    static readonly Regex HttpQueryDelimiterRegex = new Regex(@"\?", RegexOptions.Compiled); 
    static readonly Regex HttpQueryParameterDelimiterRegex = new Regex(@"&", RegexOptions.Compiled); 
    static readonly Regex HttpQueryParameterRegex = new Regex(@"^(?<ParameterName>\S+)=(?<ParameterValue>\S*)$", RegexOptions.Compiled); 

    static string GetPath(string pathAndQuery) 
    { 
     var components = HttpQueryDelimiterRegex.Split(pathAndQuery, 2); 
     return components[0]; 
    } 

    static Dictionary<string, string> GetQueryParameters(string pathAndQuery) 
    { 
     var parameters = new Dictionary<string, string>(StringComparer.OrdinalIgnoreCase); 
     var components = HttpQueryDelimiterRegex.Split(pathAndQuery, 2); 

     if (components.Length > 1) 
     { 
      var queryParameters = HttpQueryParameterDelimiterRegex.Split(components[1]); 

      foreach(var queryParameter in queryParameters) 
      { 
       var match = HttpQueryParameterRegex.Match(queryParameter); 

       if (!match.Success) continue; 

       var parameterName = WebUtility.HtmlDecode(match.Groups["ParameterName"].Value) ?? string.Empty; 
       var parameterValue = WebUtility.HtmlDecode(match.Groups["ParameterValue"].Value) ?? string.Empty; 

       parameters[parameterName] = parameterValue; 
      } 
     } 

     return parameters; 
    } 

我希望他們補充說,同樣的方法WebUtility這是System.Net可作爲.NET 4.0。