context.Request.InputStream
私はストリームリーダーを使用して最後まで読み、最終的に次のような文字列になります
"Gamestart=true&GamePlayer=8&CurrentDay=Monday&..."
C#コンソールでそれを解析するための最も効率的で「クリーンな」方法は何でしょうか?
context.Request.InputStream
私はストリームリーダーを使用して最後まで読み、最終的に次のような文字列になります
"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に解析します。
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