Jako programista PHP jestem przyzwyczajony do używania $ _GET do pobierania ciągu zapytania HTTP ... a jeśli potrzebuję całego ciągu, istnieje wiele sposobów, aby to zrobić.
Jednak w ASP nie mogę uzyskać zapytania.
Oto kod dla news.aspx (osadzony w jakimś 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);
%>
Pobieram dane wyjściowe skryptu PHP ze zdalnego serwera i działa to doskonale bez Request.Querystring.
Problem polega na tym, że próbuję uzyskać pełny ciąg zapytania w pierwszym wierszu: Request.Querystring. Otrzymuję błąd „ Odwołanie do obiektu nie jest ustawione na wystąpienie obiektu ”, co w zasadzie oznacza, że Request.Querystring nie istnieje.
Masz pojęcie, na czym polega problem? Jak mogę uzyskać ten ciąg zapytania, więc gdy index.aspx nazywa się http://test.com/news.aspx?id=2, mój skrypt pobiera http://www.example.com/rendernews.php?id=2
Odpowiedzi:
Spróbuj,
Request.Url.Query
jeśli chcesz, aby surowy querystring był ciągiem.źródło
To powinno działać dobrze dla Ciebie.
Napisz ten kod w
Page_Load
przypadku strony.string ID = Request.QueryString["id"].ToString(); Response.Redirect("http://www.example.com/rendernews.php?id=" + ID);
źródło
Request.QueryString
zwraca kolekcję par klucz / wartość reprezentujących ciąg zapytania. To nie jest ciąg. Nie myśl jednak, że spowodowałoby to błąd odwołania do obiektu. Powodem, dla którego to otrzymujesz, jest to, że jak zauważył Mauro w komentarzach. To QueryString, a nie Querystring.Próbować:
lub
<% string URL = Request.Url.AbsoluteUri System.Net.WebClient wc = new System.Net.WebClient(); string data = wc.DownloadString(URL); Response.Output.Write(data); %>
Taki sam jak kod, ale
Request.Url.AbsoluteUri
zwróci pełną ścieżkę, w tym ciąg zapytania.źródło
Po prostu użyj,
Request.QueryString.ToString()
aby uzyskać pełny ciąg zapytania, na przykład:string URL = "http://www.example.com/rendernews.php?"+Request.Querystring.ToString();
źródło
Przetestowałem Twój przykład i chociaż Request.QueryString nie można zamienić na ciąg znaków ani niejawny, ani jawny, metoda .ToString () zwraca poprawny wynik.
Co więcej, w przypadku konkatenacji z łańcuchem przy użyciu operatora „+”, tak jak w naszym przykładzie, zwróci on również poprawny wynik (ponieważ zachowuje się tak, jakby wywołano .ToString ()).
W związku z tym nie ma nic złego w Twoim kodzie i sugeruję, że problem był spowodowany literówką w kodzie, w której zapisano „Querystring” zamiast „QueryString”.
Ma to większy sens w przypadku komunikatu o błędzie, ponieważ jeśli problem polega na tym, że QueryString jest kolekcją, a nie ciągiem, musiałby podać inny komunikat o błędzie.
źródło
przed chwilą natknąłem się na ten sam problem. i rozwiązuję to w następujący sposób.
Response.Redirect("../index.aspx?Name="+this.textName.Text+"&LastName="+this.textlName.Text);
w odniesieniu do tego
źródło