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이 존재하지 않음을 의미하는 " 개체 참조개체의 인스턴스로 설정되지 않았습니다. "라는 오류가 발생 합니다.

여기에 문제가 무엇인지 아십니까? index.aspx가 http://test.com/news.aspx?id=2 와 같이 호출 될 때 내 스크립트가 http://www.example.com/rendernews.php?id=2를 가져 오도록 쿼리 문자열을 어떻게 얻을 수 있습니까?


항상 실패합니까, 아니면 get 변수가 정의되지 않은 것과 같은 경우가 있습니까?
Matt

답변:



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'에 대한 정의가 포함되어 있지 않으며 'System.Web.HttpRequest'유형의 첫 번째 인수를 허용하는 확장 메서드 'Querystring'이 없습니다. Web 이전에 "The type or namespace name 'Request'does not exist in the namespace 'System.Web'(are you missing an assembly?)"
Antony Carthy

어딘가에서 Request를 재정의하지 않는지 확인하고 싶을 수도 있습니다. 프로덕션에서 Request.Querystring [.ToString ()]을 사용하는 것이 있으며 완벽하게 작동합니다.
Matt

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

.Net 4에서는 작동하지 않았습니다. 아마도 다른 버전의 .Net에 대한 투표일 것입니다.
Fabio Milheiro

1
실제로 & amp; 그래서 사용할 수 없게됩니다. Request.Url.Query가 훨씬 낫습니다.
Jiří Herník

0

귀하의 예제를 테스트했으며 Request.QueryString이 암시 적이거나 명시 적이 지 않은 문자열로 변환 할 수 없지만 .ToString () 메서드는 올바른 결과를 반환합니다.

더 나아가 예제에서와 같이 "+"연산자를 사용하여 문자열과 연결할 때 올바른 결과를 반환합니다 (이는 .ToString ()이 호출 된 것처럼 동작하기 때문에).

따라서 귀하의 코드에는 아무런 문제가 없으며 귀하의 문제는 "QueryString"대신 "Querystring"을 작성하는 코드의 오타 때문이라고 제안합니다.

그리고 문제가 QueryString이 문자열이 아니라 컬렉션이라는 것이라면 다른 오류 메시지를 제공해야하기 때문에 오류 메시지에 더 의미가 있습니다.


-1

얼마 전에 같은 문제가 발생했습니다. 다음과 같이 해결합니다.

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

받는 참조하여


1
절대로 프레임 워크 나 프로그래밍 언어에서 이와 같은 URL을 구축하지 마십시오. URL 작성기를 사용하십시오. 위의 코드는 수행하지 않는 인코딩을 처리합니다.
Florian Winter
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.