Ter*_*rry 5 c# query-string .net-core
.NET Core 中无键查询字符串参数的替换是什么?
在 asp.net 中,语法为Request.QueryString[ null ],但是 .NET Core 会为此抛出 null 异常,不允许您传入null键名称。
例如,我需要支持这种格式的url:
http://localhost:54301/RBLeCORS.ashx?{Command:CalcEngineStatus}
然而,除此之外,我需要能够处理通过$.ajax()javascript 调用发布的命令,其中数据被发布而不是放在查询字符串上。
其中 keyless(我看到评论想将其称为 valueless,我猜这适合 .NET Core,但我看到它们被称为 keyless,用于您使用密钥访问的 asp.net b/c null)值是一个 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;
}
}
Run Code Online (Sandbox Code Playgroud)
从这里我注意到了这一点:
您可以使用 null 作为 NameValueCollection 的键,它将为您提供一个以逗号分隔的没有值的参数名称列表。
对于http://example.com?bar=3&foo您将使用它
Request.QueryString[null],它将检索 foo。
所以,在 dotnet core 中,这是行不通的。
Request包含一个名为https://learn.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.iquerycollection?view=aspnetcore-2.1Query类型的属性IQueryCollection
有了这个,您可以使用 来Item[String]通过已知密钥获取项目,如您所知。
Keys包含查询集合中存在的所有键的列表。
我认为您想要的是获取所有值,而不考虑它们的键?
你可以使用:
var values = Request.Query.ToList ()
.SelectMany (x => x.Value);
Run Code Online (Sandbox Code Playgroud)
values将是传递到查询字符串的值列表:
?key1=val1&key2=val2
会回来