web-dev-qa-db-ja.com

C#ASP.NETで完全なクエリ文字列を取得する

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

71
Antony Carthy

生のクエリ文字列を文字列として使用する場合は、 Request.Url.Query を試してください。

177
nitzmahone

これでうまくいくはずです。

このコードをページのPage_Loadイベントに記述します。

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

Request.QueryStringは、クエリ文字列を表すキー/値ペアのコレクションを返します。文字列ではありません。ただし、オブジェクト参照エラーが発生するとは思わないでください。それを得る理由は、マウロがコメントで指摘したようにです。 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 はクエリ文字列を含む完全なパスを返します。

5
Damien

次のように、Request.QueryString.ToString()を使用して完全なクエリ文字列を取得します。

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

あなたの例をテストしましたが、Request.QueryStringは暗黙的でも明示的でもない文字列に変換できませんが、.ToString()メソッドは正しい結果を返します。

さらに、例のように「+」演算子を使用して文字列と連結すると、正しい結果が返されます(これは.ToString()が呼び出されたように動作するため)。

そのため、コードには何も問題はありません。コードのタイプミスが「QueryString」ではなく「Querystring」を記述していることが原因であると考えます。

また、これは、エラーメッセージでより理にかなっています。QueryStringが文字列ではなくコレクションである場合、別のエラーメッセージを表示する必要があるためです。

0
yoel halb