通过POST解析

我使用Stream阅读器来读取context.Request.InputStream到最后并以字符串forms结束

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

在C#控制台中解析它的最有效/“干净”的方法是什么?

您可以使用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]); } 

HttpUtility.ParseQueryString

使用UTF8编码将查询字符串解析为NameValueCollection。

http://msdn.microsoft.com/en-us/library/ms150046.aspx

我知道这是一个僵尸post,但我想我会添加另一个答案,因为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(@"^(?\S+)=(?\S*)$", RegexOptions.Compiled); static string GetPath(string pathAndQuery) { var components = HttpQueryDelimiterRegex.Split(pathAndQuery, 2); return components[0]; } static Dictionary GetQueryParameters(string pathAndQuery) { var parameters = new Dictionary(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 ,从.NET 4.0 WebUtility ,它在System.Net可用。