C# 最简单的解析方法";“查询字符串”;格式化数据
使用以下代码:C# 最简单的解析方法";“查询字符串”;格式化数据,c#,asp.net,query-string,postdata,C#,Asp.net,Query String,Postdata,使用以下代码: string q = "userID=16555&gameID=60&score=4542.122&time=343114"; 解析值的最简单方法是什么,最好不用编写自己的解析器?我正在寻找与请求具有相同功能的东西。查询字符串[“gameID”]非常简单。。。使用 未经测试,但这应该有效: var qs = "userID=16555&gameID=60&score=4542.122&time=343114"; var parse
string q = "userID=16555&gameID=60&score=4542.122&time=343114";
解析值的最简单方法是什么,最好不用编写自己的解析器?我正在寻找与请求具有相同功能的东西。查询字符串[“gameID”]非常简单。。。使用
未经测试,但这应该有效:
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"];
string query=“id=3123123&userId=44423&format=json”;
字典dicQueryString=
query.Split(“&”)
.ToDictionary(c=>c.Split('=')[0],
c=>Uri.UnescapeDataString(c.Split('=')[1]);
字符串userId=diquerystring[“userId”];
编辑
如果您可以使用,那么它将更加直截了当,并且不会像LinQ那样区分大小写 正如前面的每个答案中所提到的,如果您处于可以向System.Web库添加依赖项的上下文中,使用是有意义的。(有关资料可参阅)。但是,如果这不可能,我想提出以下修改,以回答意见中提出的许多问题(如区分大小写和重复密钥):
如果您想避免需要使用的对System.Web的依赖,可以使用
System.Net.Http
中的Uri
扩展方法ParseQueryString
请注意,您必须将响应正文转换为有效的Uri
,以便ParseQueryString
工作
还请注意,在MSDN文档中,此方法是Uri类的扩展方法,因此需要引用程序集System.Net.Http.Formatting(在System.Net.Http.Formatting.dll中)。我试着用名为“System.Net.Http.Formatting”的nuget包安装它,效果很好
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;
}
使用System.Text.regular表达式;
//查询示例
//“name1=value1&name2=value2&name3=value3”
//“?名称1=value1&name2=value2&name3=value3”
专用字典解析查询(字符串查询)
{
var dic=新字典();
var reg=new Regex(((?:[?&]|^)([^&]+)=([^&]*)”;
var matches=reg.matches(查询);
foreach(匹配中的匹配){
dic[match.Groups[1].Value]=Uri.UnescapeDataString(match.Groups[2].Value);
}
返回dic;
}
System.Net.Http ParseQueryString扩展方法适合我。我正在使用OData查询选项并尝试解析出一些自定义参数
options.Request.RequestUri.ParseQueryString();
似乎给了我所需要的。谢谢!看起来不错,但是一旦我有了
var q=HttpUtility.ParseQueryString(“?userID=16555&gameID=60&score=4542.122&time=343114”),我就无法解码他们在MSDN页面上提供的可怕示例代码>如何检索特定值?我找不到System.Net.HttpUtility Net Core 1.0 frameworkSeems,就像他们删除了它一样。参考此处的答案以获得解决方案:该库还包括Nancy.Helpers.HttpUtility.ParseQueryString
。在这种特定情况下有效,但它不是通用解决方案,因为它不进行百分比解码。Right@Francis Avila,然后需要在查询中进行更多修改。如果您需要在System.Web上下文之外解析查询字符串,这是一个很好的解决方案。这保留了大小写,与ParseQueryString不同。当您有一个类似于a=1&a=2&a=3
的查询字符串时会发生什么?这是有效的,因为a=1;a=2;a=3
。使用HttpUtility.ParseQueryString
。它处理这些和其他奇怪的事情。不确定这是否有效…Uri没有附加ParseQueryString方法。当我尝试此操作时,我的代码是:var collection=new System.Uri(url.ParseQueryString()@TrevorHart是否确实添加了对System.Net.Http的引用并添加了System.Net.Http命名空间?我确实添加了,最后我只编写了自己的解析器。忽略有时也会出现的单项参数:arg1&arg2&arg3
谢谢!!它是否支持单项参数,如上面@jsuddsjr的评论所述?忽略有时也会出现的单个项参数:arg1&arg2&arg3
options.Request.RequestUri.ParseQueryString();