C# 如何在.NETCore中读取无键查询字符串
在.NET内核中,无键查询字符串参数的替换是什么 在asp.net中,语法是C# 如何在.NETCore中读取无键查询字符串,c#,.net-core,query-string,C#,.net Core,Query String,在.NET内核中,无键查询字符串参数的替换是什么 在asp.net中,语法是Request.QueryString[null],但是.net Core对此抛出null异常,不允许您为键名传入null 例如,我需要支持以下格式的url: http://localhost:54301/RBLeCORS.ashx?{Command:CalcEngineStatus} 但是,除此之外,我还需要能够处理来自javascript的$.ajax()调用发布的命令,这些调用将数据发布到javascript中,而
Request.QueryString[null]
,但是.net Core对此抛出null异常,不允许您为键名传入null
例如,我需要支持以下格式的url:
http://localhost:54301/RBLeCORS.ashx?{Command:CalcEngineStatus}
但是,除此之外,我还需要能够处理来自javascript的$.ajax()
调用发布的命令,这些调用将数据发布到javascript中,而不是放在查询字符串上
其中,keyless(我看到一些注释想称之为valueless,我想这对于.NET Core是合适的,但是我看到它们对于asp.NET b/c来说被称为keyless,您可以使用null
key)值访问它,它是一个json对象,它可以包含的不仅仅是我给出的这个简单示例
更新:这是我当前的代码,我做了一些变通
string queryData = null;
if (context.Request.Query.Count == 1 )
{
var firstKey = context.Request.Query.Keys.ElementAt(0);
var firstValue = context.Request.Query[firstKey];
if ( string.IsNullOrEmpty( firstValue ) )
{
queryData = firstKey;
}
}
我注意到这一点:
您可以使用null作为NameValueCollection的键,它将
提供一个逗号分隔的参数名列表,其中没有
价值观
因为你会用
Request.QueryString[null]
它将检索foo
所以,在dotnetcore中,这是行不通的
Request
包含一个名为Query
的属性,其类型为IQueryCollection
这样,您就可以使用
Item[String]
通过一个已知的键来获取一个项
Keys
包含查询集合中存在的所有键的列表
我想你想要的是得到所有的值,不管它们的键是什么
您可以使用:
var values = Request.Query.ToList ()
.SelectMany (x => x.Value);
值
将是传入查询字符串的值列表:
string[] commands = Request.Query
.Where(m => string.IsNullOrEmpty(m.Value))
.Select(m => m.Key).ToArray();
?键1=val1和键2=val2
会回来吗
- 瓦尔1
- 瓦尔2
ContainsKey
检查是否传递了参数:
Request.Query.ContainsKey("item1") // true
如果要从查询字符串中获取所有这些命令的列表:
string[] commands = Request.Query
.Where(m => string.IsNullOrEmpty(m.Value))
.Select(m => m.Key).ToArray();
对于
?{Command:CalcEngineStatus}&{Command:Command2}
,这将返回{Command:CalcEngineStatus}
和{Command:Command2}的字符串[]和{Command:Command2}您所说的无键是什么意思?您能给出一个您试图解析的uri示例吗?如果您只是希望得到一个JSON命令或其他可解析的命令,为什么不把它转换成字符串,这样你就可以解析它了(var命令=Request.HasValue?Request.QueryString.Value.Substring(1):“{}”;
)@JasonW我需要支持QueryString上传递的信息和表单中发布的数据。将测试你的Realest.HasValk方法,但是它看起来比我在上面发布的工作区更干净。我会考虑那些“毫无价值”,而不是“无钥匙”。我同意无价值更合适:)我看到你的观点是没有价值的和无钥匙的,而且我可以检查一个特定的键,因为它只是一个传递给web服务的json字符串/包。根据您添加到OP中的示例,添加了其他代码以加载这些命令的列表…希望这可能会有所帮助。我现在正在做类似的事情,查找一个键,确定它是什么,然后确定关联的值如果为空,我假设它与asp.net中处理的“相同”,然后继续。我将查看是否有人发布任何内容,否则我将显示我的示例代码。无论如何,显示它,我们可能有更好的机会回答这个问题!