3

context.Request.InputStream私はストリームリーダーを使用して最後まで読み、最終的に次のような文字列になります

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

C#コンソールでそれを解析するための最も効率的で「クリーンな」方法は何でしょうか?

4

3 に答える 3

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]);
}
于 2012-10-19T11:57:06.830 に答える
3

HttpUtility.ParseQueryString

UTF8エンコーディングを使用して、クエリ文字列をNameValueCollectionに解析します。

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

于 2012-10-19T11:57:28.207 に答える
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;
    }

.NET 4.0 の時点でWebUtility利用可能な同じメソッドを追加してほしいと思います。System.Net

于 2014-01-30T07:21:44.990 に答える