使用以下代码:
string q = "userID=16555&gameID=60&score=4542.122&time=343114";
最简单的方法是什么?如果可能的话,最好不要编写自己的解析器。我正在寻找与 Request.querystring ["gameID"]
具有相同功能的东西。
使用以下代码:
string q = "userID=16555&gameID=60&score=4542.122&time=343114";
最简单的方法是什么?如果可能的话,最好不要编写自己的解析器。我正在寻找与 Request.querystring ["gameID"]
具有相同功能的东西。
非常简单... 使用 HttpUtility.ParseQueryString 方法。
未经测试,但这应该可以工作:
var qs = "userID=16555&gameID=60&score=4542.122&time=343114";
var parsed = HttpUtility.ParseQueryString(qs);
var userId = parsed["userID"];
// ^^^^^^ Should be "16555". Note this will be a string of course.
你可以使用LINQ像这样做。
string query = "id=3123123&userId=44423&format=json";
Dictionary<string,string> dicQueryString =
query.Split('&')
.ToDictionary(c => c.Split('=')[0],
c => Uri.UnescapeDataString(c.Split('=')[1]));
string userId = dicQueryString["userID"];
编辑
如果您可以使用HttpUtility.ParseQueryString,那么它将更加直接并且不像LinQ那样区分大小写。
a=1&a=2&a=3
或者a=1;a=2;a=3
时会发生什么?这是有效的,使用HttpUtility.ParseQueryString
进行处理可以解决这些和其他奇怪的情况。 - Jim Mischel.ToLookup
而不是.ToDictionary
来处理“重复键”。 - drzaus正如之前每个回答中所提到的,在你可以添加依赖于System.Web库的情况下,使用HttpUtility.ParseQueryString是有意义的。(有关参考资料,请参阅Microsoft 参考源代码)。但是,如果这不可能,我想提出以下修改建议,以解决评论中提出的许多问题(例如大小写敏感性和重复键):Adil's的答案。
var q = "userID=16555&gameID=60&score=4542.122&time=343114";
var parsed = q.TrimStart('?')
.Split(new[] { '&' }, StringSplitOptions.RemoveEmptyEntries)
.Select(k => k.Split('='))
.Where(k => k.Length == 2)
.ToLookup(a => a[0], a => Uri.UnescapeDataString(a[1])
, StringComparer.OrdinalIgnoreCase);
var userId = parsed["userID"].FirstOrDefault();
var time = parsed["TIME"].Select(v => (int?)int.Parse(v)).FirstOrDefault();
arg1&arg2&arg3
。 - jsuddsjrUri
扩展方法 ParseQueryString
。Uri
,以便 ParseQueryString
起作用。string body = "value1=randomvalue1&value2=randomValue2";
// "http://localhost/query?" is added to the string "body" in order to create a valid Uri.
string urlBody = "http://localhost/query?" + body;
NameValueCollection coll = new Uri(urlBody).ParseQueryString();
这个怎么样
using System.Text.RegularExpressions;
// query example
// "name1=value1&name2=value2&name3=value3"
// "?name1=value1&name2=value2&name3=value3"
private Dictionary<string, string> ParseQuery(string query)
{
var dic = new Dictionary<string, string>();
var reg = new Regex("(?:[?&]|^)([^&]+)=([^&]*)");
var matches = reg.Matches(query);
foreach (Match match in matches) {
dic[match.Groups[1].Value] = Uri.UnescapeDataString(match.Groups[2].Value);
}
return dic;
}
arg1&arg2&arg3
- gregn3对于.NET Core,有Microsoft.AspNetCore.WebUtilities.QueryHelpers.ParseQuery。
var queryString = QueryHelpers.ParseQuery("?param1=value");
var queryParamValue = queryString["param1"];
System.Net.Http的ParseQueryString扩展方法对我很有用。我正在使用OData查询选项并尝试解析一些自定义参数。
options.Request.RequestUri.ParseQueryString();
只要你在 Web 应用程序中或不介意包含 System.Web 依赖项,HttpUtility.ParseQueryString 就可以工作。另一种方法是:
// NameValueCollection nameValueCollection = HttpUtility.ParseQueryString(queryString);
NameValueCollection nameValueCollection = new NameValueCollection();
string[] querySegments = queryString.Split('&');
foreach(string segment in querySegments)
{
string[] parts = segment.Split('=');
if (parts.Length > 0)
{
string key = parts[0].Trim(new char[] { '?', ' ' });
string val = parts[1].Trim();
nameValueCollection.Add(key, val);
}
}
var q = HttpUtility.ParseQueryString("?userID=16555&gameID=60&score=4542.122&time=343114");
,我该如何检索特定值? - Tom Gullen