我正在使用ASP构建一个RESTful API。NET Core MVC和我想使用查询字符串参数来指定对返回集合的资源进行过滤和分页。

在这种情况下,我需要读取在查询字符串中传递的值以过滤并选择要返回的结果。

我已经发现在控制器内部的Get动作访问HttpContext.Request.Query返回一个IQueryCollection。

问题是我不知道如何使用它来检索值。事实上,我认为这样做的方法是使用,例如

string page = HttpContext.Request.Query["page"]

问题是HttpContext.Request。查询["page"]不返回字符串,而是返回StringValues。

无论如何,如何使用IQueryCollection来实际读取查询字符串值?


当前回答

IQueryCollection上有一个TryGetValue(),它返回一个具有给定键的值。所以,如果你有一个名为someInt的查询参数,你可以这样使用它:

var queryString = httpContext.Request.Query;
StringValues someInt;
queryString.TryGetValue("someInt", out someInt);
var daRealInt = int.Parse(someInt);

注意,除非有多个同名的参数,否则StringValues类型不是问题。

其他回答

ASP。NET Core将根据名称自动绑定表单值、路由值和查询字符串。这意味着你可以简单地这样做:

[HttpGet()]
public IActionResult Get(int page)
{ ... }

MVC将尝试通过名称将请求数据绑定到动作参数…下面是数据源的列表,按模型绑定查看它们的顺序排列 表单值:这些是使用POST方法放入HTTP请求中的表单值。(包括jQuery POST请求)。 路由值:路由提供的路由值的集合 查询字符串:URI的查询字符串部分。

来源:ASP中的模型绑定。网络核心


供你参考,你也可以结合自动和显式方法:

[HttpGet()]
public IActionResult Get(int page
     , [FromQuery(Name = "page-size")] int pageSize)
{ ... }

从路由中获取数据通常有3种方式: 1.查询字符串 2.查询参数 3.混合动力

我描述查询字符串:

exp:

[HttpGet("Home/routing")]
public IActionResult privacy(String name)
{
return ViewModel:name
}

将name作为querystring传递:

网址:/ Home /端口路由?name =亚历克斯

下面是我使用的一个代码示例(带有。net Core视图):

@{
    Microsoft.Extensions.Primitives.StringValues queryVal;

    if (Context.Request.Query.TryGetValue("yourKey", out queryVal) &&
        queryVal.FirstOrDefault() == "yourValue")
    {
    }
}

StringValues是一个字符串数组。你可以通过提供一个索引来获取你的字符串值,例如HttpContext.Request.Query["page"][0]。

也许有帮助。 获取视图中的查询字符串参数

观点:

@inject Microsoft.AspNetCore.Http.IHttpContextAccessor HttpContextAccessor
@{ Context.Request.Query["uid"]}

Startup.cs配置服务:

services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();