2009-12-10 3 views
62

Как программист PHP Я привык использовать $ _GET для извлечения строки запроса HTTP ... и если мне нужна целая строка, у вас есть множество способов сделать это.Получить полную строку запроса в C# ASP.NET

В 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 не существует.

Любая идея, в чем проблема? Как я могу получить эту строку запроса, поэтому, когда вызывается index.aspx, как http://test.com/news.aspx?id=2, мои сценарии выбираются http://www.example.com/rendernews.php?id=2

+0

ли он всегда терпит неудачу, или есть крайние случаи, как не выйдут переменные определен? – Matt

+0

Он всегда терпит неудачу ... –

ответ

5

Request.QueryString возвращает вам набор пар ключ/значение, представляющих строку запроса. Не строка. Не думайте, что это приведет к ошибке ссылки на объект. Причина, по которой вы получаете это, потому что, как указал Мауро в комментариях. Это QueryString, а не Querystring.

Try:

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 возвращает полный путь, включая строку запроса.

+0

С этим я получаю: «System.Web.HttpRequest» не содержит определения для «Querystring» и никакого метода расширения «Querystring», принимающего первый аргумент типа «System.Web.HttpRequest '" , и когда я пытаюсь добавить System.Web перед ним, я получаю« Тип или имя пространства имен «Запрос» не существует в пространстве имен «System.Web» (вам не хватает сборки?) « –

+0

Можете сделать убедитесь, что вы не переопределяете запрос где-нибудь. У меня есть что-то, использующее Request.Querystring [.ToString()] в производстве, и оно работает безупречно. – Matt

+2

разве это не QueryString, а не Querystring? код выше выглядит как C# - запомнить чувствительность к регистру – Mauro

10

Это должно сработать отлично.

Запишите этот код на Page_Load странице события.

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

Просто используйте Request.QueryString.ToString(), чтобы получить полную строку запроса, как это:

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

Это возвращает имя класса. – Allov

+1

@Allov Я протестировал это, и он верно вернул строку запроса, а на самом деле даже без .ToString() будет работать при конкатенации с помощью строки –

+0

Это не сработало .Net 4. Возможно, это голоса для других версий .Net. –

0

Я проверил ваш пример, и в то время как Request.QueryString не конвертируется в строку ни неявной, ни явного до сих пор. Метод ToString() возвращает правильный результат.

Более подробно при конкатенации строки с помощью оператора «+», как и в вашем примере, он также вернет правильный результат (потому что это ведет себя так, как если бы был вызван .ToString()).

Как таковой нет ничего плохого в вашем коде, и я бы предположил, что ваша проблема возникла из-за опечатки в вашем коде, написавшего «Querystring» вместо «QueryString».

И это имеет смысл с вашим сообщением об ошибке, так как проблема заключается в том, что QueryString представляет собой коллекцию, а не строку, она должна была бы дать другое сообщение об ошибке.

0

всего лишь минуту назад я столкнулся с той же проблемой. и я разрешаю его следующим образом.

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

со ссылкой на this

Смежные вопросы