在 ASP.NET MVC6 中访问查询字符串

Posted

技术标签:

【中文标题】在 ASP.NET MVC6 中访问查询字符串【英文标题】:Accessing querystring in ASP.NET MVC6 【发布时间】:2015-06-23 06:09:56 【问题描述】:

我正在尝试访问我的 ASP.NET MVC6 应用程序中的查询字符串参数。但它似乎不像 MVC5 和 web 表单,QueryString 没有任何索引器,我不能说这样的话:

string s = Request.QueryString["key1"] //gives error

所以,我的问题是——如何在 MVC6 中访问查询字符串参数?

令人惊讶的是Request.Forms 集合按预期工作(如在 MVC5 或 Web 表单中)。

谢谢。

【问题讨论】:

您不应该在 MVC 中使用 QueryString 或 Form,而是应该在您的控制器中有参数,该参数将自动绑定到值。 【参考方案1】:

支持使用索引器获取查询。

在此处查看 MVC 代码测试 - https://github.com/aspnet/Mvc/blob/e0b8532735997c439e11fff68dd342d5af59f05f/test/WebSites/ControllersFromServicesClassLibrary/QueryValueService.cs

context.Request.Query["value"];

另请注意,在 MVC 6 中,您可以使用 [FromQuery] 属性直接从查询中建模绑定。

public IActionResult ActionMethod([FromQuery]string key1)

    ...

【讨论】:

[FromQuery] 是我所缺少的 这实际上是一个学习的时刻。我什至不知道 [FromQuery] 存在。它似乎没有很好的记录。还有一个 [FromHeader] 和 [FromForm] 等等。您甚至可以编写自定义活页夹。【参考方案2】:

那么,我的问题是——如何在 MVC6 中访问查询字符串参数?

您可以使用Request.Query,这是 ASPNET 5 中的新增功能。

 var queryStrings = Request.Query;

我要尝试的 URL 是 - http://localhost:12048/Home/Index?p=123&q=456 你可以使用 -

queryStrings.Keys

然后你可以通过迭代键来获取值 -

 var qsList = new List<string>();
 foreach(var key in queryStrings.Keys)
 
      qsList.Add(queryStrings[key]);
 

【讨论】:

以上是关于在 ASP.NET MVC6 中访问查询字符串的主要内容,如果未能解决你的问题,请参考以下文章

在 ASP.NET Core 中将 Razor 视图渲染为字符串

如何使用 ASP.NET Core 从查询字符串中读取值?

解读ASP.NET 5 & MVC6系列:依赖注入

解读ASP.NET 5 & MVC6系列

Asp.net 5 (MVC6) Areas 分区

解读ASP.NET 5 & MVC6系列:ASP.NET 5简介