GET メソッドで別ページにデータの送信を行う場合は、URL の後ろにキーと値を文字列で連結させて送信します。 以下は、キー( id ) に値 “001” を、キー( name )に値 “gesunokiwamiotome” を設定している例になります。 なお、複数のデータを送るために & で連結しています。
スポンサーリンク
http://host/WebForm1.aspx?id=001&name=gesunokiwamiotome
GET メソッドで送信されたデータを取得する
ASP.NET では GET メソッドで送信されたデータを、Page.Request.QueryString.Get メソッドで取得することができます。
VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load ' Get メソッドにはキー名を設定し、値を取得する Dim id As String = Page.Request.QueryString.Get("id") Dim name As String = Page.Request.QueryString.Get("name") End Sub
C#
protected void Page_Load(object sender, EventArgs e) { // Get メソッドにはキー名を設定し、値を取得する string id = Page.Request.QueryString.Get("id"); string name = Page.Request.QueryString.Get("name"); }
不完全な URL の記述
URL 内の GET パラメータの記述が不完全な場合に、Page.Request.QueryString.Get メソッドでどのように値を取得できるかを下表にまとめます。
URL | 内容 | Page.Request.QueryString.Get |
---|---|---|
http://host/WebForm1.aspx? | キー、値ともに記述なし | null(VBはNothing) |
http://host/WebForm1.aspx?id | キーのみ、イコール含めて値なし | null(VBはNothing) |
http://host/WebForm1.aspx?id= | キー、イコールあり、値なし | 空文字列(※正常) |
日本語を GET メソッドで送受信する
以下のように、GET メソッドで日本語を送信する場合について確認してみます。
http://host/WebForm1.aspx?id=001&name=ゲスの極み乙女
このように、単純に日本語を URL に設定してサーバにリクエストを送っても、サーバで取得したデータはクライアントが期待している値として受信できていない可能性があります。いわゆる、文字化けです。また、サーバーによっては URL として受け付けてさえもらえない可能性すらあります。
実は、 URL として使用可能な文字は RFC3986 により定められていて、それ以外の禁則文字を URL に使用する場合は URL エンコードを行なわなければなりあません。なお、URL に使用できる文字は以下のような文字がありますが、詳細は「RFC3986 URI Generic Syntax」を参照ください。
[ A – Z ], [ a – z ], [ 0 – 9 ], [ ( ], [ ) ], [ – ], [ _ ]
実際に上記の URL をエンコード(文字コード:UTF-8)した結果は以下のとおりです。
http://host/WebForm1.aspx?id=001&name=%E3%82%B2%E3%82%B9%E3%81%AE%E6%A5%B5%E3%81%BF%E4%B9%99%E5%A5%B3
同じ日本語でも、文字コードによっては URL エンコードした結果が異なります。そのため、送信側と 受信側で同一の文字コードでエンコードおよびデコードを行うことが必要です。 なお、ASP.NET では、デフォルトで文字コードに UTF-8 が使用されます。
URL エンコード
ASP.NET では、Server.UrlEncode を使用してエンコードを行うことができます。
VB.NET
Dim name As String = "ゲスの極み乙女" Dim url As String = "WebForm1.aspx?id=000&name=" + Server.UrlEncode(name) Response.Redirect(url)
C#
string name = "ベッキー"; string url = "WebForm1.aspx?id=000&name=" + Server.UrlEncode(name); Response.Redirect(url);
URL デコード
Server.UrlEncode でエンコードした結果を、Server.UrlDecode でデコードしています。
VB.NET
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) _ Handles Me.Load ' Get メソッドにはキー名を設定し、値を取得する Dim id As String = Page.Request.QueryString.Get("id") Dim name As String = Page.Request.QueryString.Get("name") ' URL デコードを行う name = Server.UrlDecode(name)
C#
protected void Page_Load(object sender, EventArgs e) { // Get メソッドにはキー名を設定し、値を取得する string id = Page.Request.QueryString.Get("id"); string name = Page.Request.QueryString.Get("name"); // URL デコードを行う name = Server.UrlDecode(name); }
ベッキーかわいいです。