在C#ASP.NET中获取完整的查询字符串


79

作为一个PHP程序员,我习惯于使用$ _GET来检索HTTP查询字符串...如果我需要整个字符串,则有很多方法可以实现。

但是在ASP中,我似乎无法获取查询。

这是news.aspx的代码(嵌入一些HTML):

<%                             
    string URL = "http://www.example.com/rendernews.php?"+Request.Querystring;
    System.Net.WebClient wc = new System.Net.WebClient();
    string data = wc.DownloadString(URL);
    Response.Output.Write(data);
%>

我正在从远程服务器获取PHP脚本的输出,并且在没有Request.Querystring的情况下,它可以完美地工作。

问题是我试图在第一行获取完整的查询字符串:Request.Querystring。我收到一个错误“对象引用未设置为对象的实例”,这基本上意味着Request.Querystring不存在。

知道这里出了什么问题吗?我如何获取该查询字符串,以便在像http://test.com/news.aspx?id=2那样调用index.aspx时,我的脚本获取http://www.example.com/rendernews.php?id=2


它是否总是失败,还是存在诸如未定义获取变量的极端情况?
马特

Answers:



16

这应该适合您。

Page_Load在页面事件中编写此代码。

string ID = Request.QueryString["id"].ToString();
Response.Redirect("http://www.example.com/rendernews.php?id=" + ID);

8

Request.QueryString返回给您代表查询字符串的键/值对的集合。不是字符串。不要以为这会导致对象引用错误。之所以这样,是因为正如Mauro在评论中指出的那样。它是QueryString,而不是Querystring。

尝试:

Request.QueryString.ToString();

要么

<%                                 
    string URL = Request.Url.AbsoluteUri 
    System.Net.WebClient wc = new System.Net.WebClient();
    string data = wc.DownloadString(URL);
    Response.Output.Write(data);
%>

与您的代码相同,但Request.Url.AbsoluteUri将返回完整路径,包括查询字符串。


这样,我得到:“'System.Web.HttpRequest'不包含'Querystring'的定义,也没有扩展方法'Querystring'接受类型为'System.Web.HttpRequest'的第一个参数”,当我尝试添加System时。在Web之前,我得到“类型或名称空间名称'Request'在名称空间'System.Web'中不存在(您是否缺少程序集?)”
Antony Carthy 2009年

可能想确保您没有在某处覆盖“请求”。我在生产中使用了Request.Querystring [.ToString()],它可以完美地工作。
马特

2
它不是QueryString而不是Querystring吗?上面的代码看起来像C#-记住区分大小写
Mauro

1
就我而言,这正是我要避免的事情,因为ToString()在我被强制使用的.NET框架的****旧版本中有错误。
弗洛里安(Florian Winter)

1

只需使用Request.QueryString.ToString()即可获取完整的查询字符串,如下所示:

string URL = "http://www.example.com/rendernews.php?"+Request.Querystring.ToString();

1
这将返回类的名称。
Allov

1
@Allov我已经测试过了,它确实正确返回了查询字符串,实际上,即使没有.ToString(),它也可以在与字符串连接时起作用
yoel halb 2012年

它在.Net 4中不起作用。可能它的投票赞成其他版本的.Net。
Fabio Milheiro,2015年

1
它实际上正在改变&for&amp; 因此使其无法使用。Request.Url.Query更好。
希里·赫尔尼克(JiříHerník)'18年

0

我已经测试了您的示例,虽然Request.QueryString不能转换为既不是隐式也不是显式的字符串,但.ToString()方法仍返回正确的结果。

像在您的示例中那样,使用“ +”运算符将其与字符串连接时,还会返回正确的结果(因为它的行为就像调用了.ToString()一样)。

因此,您的代码没有任何问题,我建议您解决此问题是由于您的代码中写错了“ Querystring”而不是“ QueryString”。

这对于您的错误消息更有意义,因为如果问题是QueryString是一个集合而不是一个字符串,则它必须给出另一个错误消息。


-1

刚才,我遇到了同样的问题。我以以下方式解决它。

Response.Redirect("../index.aspx?Name="+this.textName.Text+"&LastName="+this.textlName.Text);

参考这个


1
永远不要永远不要以任何框架或编程语言来构建这样的URL。使用网址构建器。他们会为您编码,而上面的代码则不会。
弗洛里安(Florian Winter)
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.