C# 如何在.NETCore中读取无键查询字符串

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中,而

在.NET内核中,无键查询字符串参数的替换是什么

在asp.net中,语法是
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中处理的“相同”,然后继续。我将查看是否有人发布任何内容,否则我将显示我的示例代码。无论如何,显示它,我们可能有更好的机会回答这个问题!