【发布时间】:2018-06-19 17:06:11
【问题描述】:
假设我有一些如下所示的网址:www.myhost.com/mypage?color=blue
在 Asp.Net Core 中,我希望通过执行以下操作来获取颜色查询参数值:
string color = Request.Query["color"];
但事实证明Request.Query["color"] 返回的值类型为StringValues 而不是string。这是为什么呢?
显然StringValues 类型可以保存一个字符串数组,并且支持隐式转换为string[],这很酷,但是为什么查询参数值需要它呢?
必须得到这样的值似乎很奇怪:
string color = Request.Query["color"].ToString();
更糟糕的是,无法再像这样检查一个值以查看是否指定了查询参数
if(Request.Query["color"] == null) {
//param was not specified
}
但必须像这样检查
if(Request.Query["color"].Count == 0) {
//param was not specified
}
既然单个查询参数不能有多个值(据我所知),为什么Request.Query["color"] 返回一个StringValues 对象而不是一个字符串?
【问题讨论】:
-
您希望 www.myhost.com/mypage 的值是多少?color=blue&color=red&color=green
-
@podiluska 我不知道多次指定参数是否有效。如果我这样做了,我希望只收到最后一个,即您的示例中的绿色。
-
不要使用
Request.Query,而是使用model binding。 -
@RonC 我很确定这就是查询字符串 使用 的工作方式。但是当前在查询字符串上提供集合的“智慧”是重复键。你和我是否同意这一点无关紧要:)
-
你可以使用
var color = Request.Query["color"]; if (StringValues.IsNullOrEmpty(color)) { // do something };
标签: c# asp.net-core