AcceptTypes

stringArray = Request.AcceptTypes

 
 

クライアントが受け入れる MIME (Multipurpose Internet Mail Extension) タイプを保持する文字列配列を返します。このプロパティを使用して、Word や Excel のようなアプリケーションのタイプなど、特定のタイプの応答をクライアントが受け入れ可能かどうかを判断できます。Word や Excel は、Internet Explorer だけがサポートしています。

 

次の表に、一般的な MIME タイプの一部を示します。

 
MIME タイプ説明
text/htmlHTML テキストコンテンツ
text/xmlXML テキストコンテンツ
image/gifGIF エンコードされたイメージデータ
image/jpgJPEG エンコードされたイメージデータ
application/mswordMicrosoft Word のバイナリデータ
 
パラメータ
 
  • stringArray
      受け入れるタイプの配列をプロパティから受け取る文字列配列です。
 

次のコード例では、文字列配列と整数カウンタの変数を宣言し、AcceptTypes プロパティ値をその配列変数に代入します。次に、カウンタ変数を使用して配列メンバーを繰り返し実行し、Message Label コントロールを使用して、各値をブラウザに書き込みます。

 
Sub Page_Load(  )
   'Display Accept Types
   Dim MyArray(  ) As String
   Dim I As Integer
   MyArray = Request.AcceptTypes
   For I = 0 To MyArray.GetUpperBound(0)
      Message.Text &= "Type " & CStr(I) & ": " & CStr(MyArray(I)) & _
              "<br/>"
   Next I
End Sub
 

コードの出力は、次のようになります。

 
  • Type 0: image/gif
  • Type 1: image/x-xbitmap
  • Type 2: image/jpeg
  • Type 3: image/pjpeg
  • Type 4: application/vnd.ms-powerpoint
  • Type 5: application/vnd.ms-excel
  • Type 6: application/msword
  • Type 7: */*
 
メモ

このプロパティにより、クライアントが処理できない応答をサーバーからクライアントに送信して時間を無駄にすることを防ぐことができます。たとえば、通常は、Excle ワークシートを返すことによって実現される要求を、クライアントが Excel MIME タイプ application/vnd.ms-excel をサポートしない場合に、別のタイプの応答を使用して実現できます。

 
ApplicationPath

stringvar = Request.ApplicationPath

 
 

現在のアプリケーションの仮想ルートへのパスを保持する文字列を返します。

 
パラメータ
 
  • stringvar
      ApplicationPath プロパティの値を受け取る文字列変数です。
 

次のコード例では、ApplicationPath を取得し、取得したパスを Message Label コントロールを使用してクライアントに書き込みます。

 
Sub Page_Load(  )
   Message.Text = Request.ApplicationPath
End Sub
 

コードの出力は、要求が送信されたアプリケーションの仮想ルートの名前になります。

 
Browser

bc = Request.Browser

 
 

クライアントブラウザの機能を示す HttpBrowserCapabilities クラスのインスタンスを返します返されたクラスのインスタンスを使用して、クライアントブラウザがサポートする機能を判断できます。HttpBrowserCapabilities クラスは、ブール値プロパティと文字列プロパティのセットとしてクライアントブラウザの機能を公開します。HttpBrowserCapabilities クラスには、次のプロパティがあります。

 
 
  • ActiveXControls
      ブラウザが ActiveX コントロールをサポートするかどうかを示すブール値です。
  • AOL
      ブラウザが AOL ブラウザかどうかを示すブール値です。
  • BackgroundSounds
      ブラウザがバックグラウンドサウンドをサポートするかどうかを示すブール値です。
  • Beta
      ブラウザがベータソフトウェアかどうかを示すブール値です。
  • Browser
      User-Agent ヘッダ値を保持する文字列です。
  • CDF
      コンテンツのプッシュ配信用の CDF (Channel Definition Format) をブラウザがサポートするかどうかを示すブール値です。
  • ClrVersion
      クライアントマシンに CLR がインストールされている場合、その CLR に関するバージョン情報を保持する System.Version オブジェクトを User-Agent ヘッダから返します。ClrVersion が Nothing でない場合は、Major、Minor、Revision、Build の 4 つの整数プロパティからバージョン情報を取得できます。
  • Cookies
      ブラウザが Cookies をサポートするかどうかを示すブール値です。
  • Crawler
      ブラウザが検索エンジン Web クローラかどうかを示すブール値です。
  • EcmaScriptVersion
      クライアントブラウザによってサポートされる ECMAScript のバージョンに関する情報を保持する Version クラスのインスタンスを返します。EcmaScriptVersion が Nothing でない場合は、Major、Minor、Revision、Build の 4 つの整数プロパティからバージョン情報を取得できます。
  • Frames
      ブラウザがフレームをサポートするかどうかを示すブール値です。
  • Item
      Request.Browser.Item(keyname) などの値へのディクショナリインターフェイスです。
  • JavaApplets
      ブラウザが Java アプレットをサポートするかどうかを示すブール値です。
  • JavaScript
      ブラウザが JavaScript をサポートするかどうかを示すブール値です。
  • MajorVersion
      ブラウザのメジャーバージョン番号を表す整数です。たとえば、IE 3.01 の場合、MajorVersion プロパティは 3 を返します。
  • MinorVersion
      ブラウザのマイナーバージョン番号を表す倍精度浮動小数点型の値です。たとえば、IE 3.01 の場合、MinorVersion プロパティは .01 を返します。
  • MSDomVersion
      クライアントブラウザがサポートする Microsoft XML DOM (ドキュメントオブジェクトモデル) のバージョンに関する情報を保持する Version クラスのインスタンスを返します。MSDomVersion が Nothing でない場合は、Major、Minor、Revision、Build の 4 つの整数プロパティからバージョン情報を取得できます。
  • Platform
      User-Agent ヘッダにプラットフォーム名が存在する場合はその名前を保持する文字列です。
  • Tables
      ブラウザが HTML テーブルをサポートするかどうかを示すブール値です。
  • Type
      クライアントブラウザの名前とメジャーバージョンを保持する文字列です。
  • VBScript
      ブラウザが VBScript をサポートするかどうかを示すブール値です。
  • Version
      クライアントブラウザのメジャーバージョン番号とマイナーバージョン番号の両方を保持する文字列です。
  • W3CDomVersion
      クライアントブラウザがサポートする W3C (World Wide Web Consortium) XML DOM のバージョンに関する情報を保持する Version クラスのインスタンスを返します。W3CDomVersion が Nothing でない場合は、Major、Minor、Revision、Build の 4 つの整数プロパティからバージョン情報を取得できます。
  • Win16
      クライアントが Win16 マシンかどうかを示すブール値です。
  • Win32
      クライアントが Win32 マシンかどうかを示すブール値です。
 
パラメータ
 
  • bc
      HttpBrowserCapabilities 型のオブジェクト変数です。
 
Sub Page_Load(  )
   Dim bc As HttpBrowserCapabilities
   bc = Request.Browser
   If bc.Cookies Then
      Message.Text = "Cookies are available with this browser"
   Else
      Message.Text = "Cookies are not available with this browser"
   End If
End Sub
 
メモ

複数のブラウザをサポートする予定があり、Internet Explorer 5 や 6 または Netscape 6 などのより上位のブラウザで、最も高レベルの機能を提供する必要がある場合は、このプロパティを頻繁に使用することになります。Cookies や JavaScript などの一部のプロパティで返されるブール値は、要求を送信するブラウザのバージョンがこれらの機能をサポートしているかどうかだけを示すものであり、現在のユーザーのブラウザでこれらの機能が有効になっているかどうかはわかりません。

 

このプロパティは、カスタムサーバーコントロールを開発する際に特に重要となります。これは、このプロパティにより、カスタムコントロールの出力を特定のブラウザ、またはブラウザのクラスに合わせて自動調整できるためです。カスタムコントロールの開発の詳細については、第 6 章を参照してください。

 
ClientCertificate

cs = Request.ClientCertificate

 
 

HttpClientCertificate クラスのインスタンスを返します。このクラスは、クライアントのセキュリティ証明書の設定に関する情報を公開します。公開されるプロパティには、発行者情報、キーサイズ、証明書の有効期間などがあります。

 
パラメータ
 
  • cs
      HttpClientCertificate 型のオブジェクト変数です。
 
 
Sub Page_Load(  )
   Dim cs As HttpClientCertificate
   cs = Request.ClientCertificate
   Message.Text = "Certificate Issuer is: " & cs.Issuer & "."
End Sub
 
メモ

このプロパティは、イントラネットの設定で使用することになります。イントラネットの設定では、ブラウザ経由で入力された一連の資格情報を使用してクライアントの認証を要求するのではなく、ユーザーの証明書サーバーから発行された証明書を限られた数のクライアントに提供してアプリケーションにアクセスするようにします。この場合、セキュリティで保護されたアクセスを提供するために、クライアント証明書が NT ユーザーアカウントにマップされます。クライアント証明書が信頼済みのサードパーティから発行される場合もありますが、この方法はほとんど使用されません。要求を行っているクライアントにクライアント証明書がインストールされていない場合、このプロパティは有効なプロパティ値を持たない HttpClientCertificate インスタンスを返します。

 
ContentEncoding

ce = Request.ContentEncoding

 
 

System.Text 名前空間にある Encoding クラスのインスタンスを返します。このクラスは、現在行っている要求の本文の文字エンコードを表します。

 
パラメータ
 
  • ce
      Encoding 型のオブジェクト変数です。
 

次の例では、ユーザーに対し現在の ContentEncoding を表示する方法を示します。

 
Sub Page_Load(  )
   Dim ce As System.Text.Encoding
   ce = Request.ContentEncoding
   Message.Text = "Current encoding is: " & ce.EncodingName & "."
End Sub
 

UTF-8 コンテンツエンコードを使用する要求の場合、この例の出力は次のようになります。

 
Current encoding is: Unicode (UTF-8).
 
ContentLength

intvar = Request.ContentLength

 
 

クライアントから送信された要求の長さをバイト単位で表す整数 を返します。このプロパティは、HTTP 要求の本文で送信されたコンテンツの長さのみを含みます。HTTP ヘッダの長さ、または HTTP GET 要求の一部として送信されたヘッダ内のデータの長さは含みません。HTTP 要求に本文がない場合、値は 0 になります。

 
パラメータ
 
  • intvar
      バイト単位でコンテンツの長さを受け取る整数変数です。
 

次の例では、現在の要求の長さをブラウザに表示する方法を示します。

 
Sub Page_Load(  )
   Dim length As Integer
   length = Request.ContentLength
   Message.Text = "Length of request was: " & length & " bytes."
End Sub
 

次のコードを使用して、サンプルページにポストすることができます。

 
<html>
   <head>
      <title>Submit a named parameter via POST</title>
   </head>
<body>
   <form id="form1" action="ContentLength.aspx" method="POST">
      <h3>Name:</h3>
      <input type="text" name="name">
      <input type="submit">
   </form>
</body>
</html>
 
メモ

このプロパティを使用すると、POST 要求経由でポストされたコンテンツでアクションを行う前に、そのコンテンツの長さを調べることができます。たとえば、ファイル入力フィールドからページにファイルが渡される場合、ユーザーがアップロードするファイルを保存または処理する前に ContentLength プロパティを確認して、特定のサイズを超えるファイルがアップロードされないようにすることができます。複数のフォームフィールドを受け取る場合は、ファイルの送信に使用する HtmlInputFile コントロールの PostedFile.ContentLength プロパティを参照することによって、アップロードされるファイルのサイズに関するより明確なデータを取得できます。

 
ContentType

stringvar = Request.ContentType

 
 

現在のクライアント要求で使用されている MIME タイプを保持する文字列を返します。GET 要求では、このプロパティが空の文字列を返す場合があります。

 
パラメータ
 
  • stringvar
      コンテンツタイプを受け取る文字列変数です。
 

次の例では、要求の ContentType に応じて異なるアクションをページ内で実行する方法を示します。

 
Sub Page_Load(  )
   Dim ct As String
   ct = Request.ContentType
   If ct = "application/x-www-form-urlencoded" Then
      'Process form input
      Message.Text = "Form data was submitted."
   Else
      Message.Text = "Content Type of request is: " & ct
   End If
End Sub
 

次のコードを使用して、サンプルページにポストすることができます。

 
<html>
   <head>
      <title>Submit a named parameter via POST</title>
   </head>
<body>
   <form id="form1" action="ContentType.aspx" method="POST">
      <h3>Name:</h3>
      <input type="text" name="name">
      <input type="submit">
   </form>
</body>
</html>
 
メモ

このプロパティを使用して、要求のコンテンツタイプが想定したタイプであることを確認することもできます。これにより、無効な要求によるプロセッサ時間の浪費を回避したり、悪意のあるユーザーが想定外のコンテンツを送信して偽の要求をアプリケーション対して行うことを回避することができます。

 
FilePath

stringvar = Request.FilePath

 
 

現在のクライアント要求の仮想パスを保持する文字列を返します。仮想パスには、アプリケーションのルートフォルダの名前、要求のパス内のすべてのサブフォルダ、および要求したファイル名が含まれます。

 
パラメータ
 
  • stringvar
      ファイルパスを受け取る文字列変数です。
 

次の例では、ユーザーに対して FilePath プロパティを表示します。

 
Sub Page_Load(  )
   Dim fp As String
   fp = Request.FilePath
   Message.Text = "The virtual path of the current request is: _
           & "<strong>" & fp & "</strong>"
End Sub
 
メモ

このプロパティは、本章の後の部分で説明する Path プロパティと等価です。

 
HttpMethod

stringvar = Request.HttpMethod

 
 

現在の要求のメソッド (GET、POST、または HEAD など) を保持する文字列を返します。

 
パラメータ
 
  • stringvar
      現在の要求の HTTP メソッドを受け取る文字列変数です。
 

次の例では、HttpMethod プロパティを使用して、特定の要求に対して実行するアクションを判断します。

 
Sub Page_Load(  )
   Select Case Request.HttpMethod
      Case "POST"
         Response.Write("POST requests not allowed!<br/>")
         Response.End
      Case "HEAD"
         Response.Write("HEAD requests not allowed!<br/>")
         Response.End
      Case "GET"
         'Process request
         Message.Text = "GET requests are allowed!<br/>"
      Case Else
         Response.Write("Unknown request: not allowed!<br/>")
         Response.End
   End Select
End Sub
 

メッセージを送信するために Response.Write を使用してから、Response.End を呼び出しています。Response.End を呼び出すことにより、そのページの処理が直ちに終了し、すべてのサーバーコントロール出力の表示も行われません。サンプルページに POST 要求を行うページのコードは、次のとおりです。

 
<html>
   <head>
      <title>Submit a named parameter via POST</title>
   </head>
<body>
   <form id="form1" action="HttpMethod.aspx" method="POST">
      <h3>Name:</h3>
      <input type="text" name="name">
      <input type="submit">
   </form>
</body>
</html>
 
メモ

従来の ASP では、通常、要求メソッドは ServerVariables コレクションの REQUEST_METHOD キーを使用して取得していました。多くの場合、このキーは、自己送信フォームのページを作成すために使用され、GET メソッドを検出した場合はフォームフィールドのセットを表示し、また POST メソッドを検出した場合はフォームフィールドから受け取った入力を処理することにより作成していました。ASP.NET Web フォームは、自己送信フォームの組み込み機能を提供します。runat="server" 属性を備えた 1 つのフォームを追加し、そのフォームに入力形式のサーバーコントロールを追加することにより、デベロッパーは、ページの IsPostBack プロパティを単に確認して、POST 要求または GET 要求を受け取ったかどうかを判断し、そのプロパティに基づいて目的のコードを実行できます。

 
InputStream

inputstream = Request.InputStream

 
 

着信 HTTP 要求の本文を保持する Stream オブジェクトを返します。

 
パラメータ
 
  • inputstream
      Stream 型のオブジェクト変数です。
 

次の例は、バイト配列を使用して、特定の文字を検索し、その文字とストリームの残りのコンテンツを文字列にコピーします。次の例に示されている @ Import ディレクティブは、ページの先頭に配置する必要があります。

 
<% @ Import Namespace="System.IO" %>

Sub Page_Load(  )
   Dim InStream As Stream
   Dim iCounter, StreamLength, iRead As Integer
   Dim OutString As String
   Dim Found As Boolean

   InStream = Request.InputStream
   StreamLength = CInt(InStream.Length)
   Dim ByteArray(StreamLength) As Byte
   iRead = InStream.Read(ByteArray, 0, StreamLength)
   InStream.Close(  )

   For iCounter = 0 to StreamLength - 1
      If Found = True Then
         OutString &= Chr(ByteArray(iCounter))
      End If
      If Chr(ByteArray(iCounter)) = "A" Then
         Found = True
         OutString &= Chr(ByteArray(iCounter))
      End If
   Next iCounter

   Message.Text = "Output: " & OutString
End Sub
 

次のコードを使用して、サンプルページにポストすることができます。

 
<html>
   <head>
   </head>
<body>
   <form id="form1" action="InputStream.aspx" method="POST">
      <h3>Name:</h3>
      <input type="text" name="name">
      <input type="submit">
   </form>
</body>
</html>
 

このコードは、要求の本文に出現する最初の英大文字 A を出力として返します。A 以降のすべての文字は、ストリームの末尾に返されます。

 
メモ

このプロパティは、要求の本文をバイトレベルでフィルタリングする場合に役に立ちます。このプロパティは、POST 要求でのみ機能します。これは、要求の本文を提供する HTTP 要求のうち通常使用されるは POST 要求のみであるためです。

 
IsAuthenticated

boolvar = Request.IsAuthenticated

 
 

現在の要求が認証済みのユーザーから行われているかどうかを示すブール値 を返します。このプロパティは、NTLM アカウントデータベースに対して認証の検索を行います。

 
パラメータ
 
  • boolvar
      ユーザーの認証状態を受け取るブール値変数です。
 

次の例では、現在のユーザーが認証されているかどうかを調べ、そのユーザーの認証状態に応じて、2 つのメッセージのうちの 1 つを出力します。認証済みのユーザーに配信されるメッセージは、ページの User プロパティを利用して、現在のユーザーの名前とドメインを出力します。

 
Sub Page_Load(  )
   Dim boolAuth As Boolean

   boolAuth = Request.IsAuthenticated

   If boolAuth Then
      Message.Text = "User " & Page.User.Identity.Name & " is authenticated."
   Else
      Message.Text = "Current user is not authenticated."
   End If
End Sub
 
メモ

HttpRequest クラスが公開する IsAuthenticated プロパティに加えて、HttpRequest クラスとほぼ同じ目的で、FormsIdentity クラス、WindowsIdentity クラス、および PassportIdentity クラスが IsAuthenticated プロパティを公開します。HttpRequest クラスの IsAuthenticated プロパティは、使用する認証方法にかかわらず、ユーザーの認証状態を返します。

 
IsSecureConnection

boolvar = Request.IsSecureConnection

 
 

現在の接続が SSL (Secure Sockets Layer) を通信に使用するかどうかを示すブール値を返します。

 
パラメータ
 
  • boolvar
      現在の要求の SSL 状態を受け取るブール値変数です。
 

次の例では、現在の要求が SSL 経由で行われたかどうかに応じて異なるアクションを実行する方法を示します。

 
Sub Page_Load(  )
   Dim boolvar As Boolean
   boolvar = Request.IsSecureConnection
   If boolvar = True Then
      Message.Text = "Connection is HTTPS."
   Else
      Message.Text = "Connection is HTTP."
   End If
End Sub
 
メモ

通常、このプロパティを使用して、要求されたページ経由で送信するクレジットカード番号などの機密データを暗号化するなど、SSL 接続が必要となる要求が正しく実行されているかどうかを判断します。また、SSL が使用されているかどうかわからないページでこのプロパティを使用し、SSL の状態に合わせてページへの出力の表示方法を決定できます。SSL 通信での暗号化と復号化はパフォーマンスに悪影響を及ぼすので、一般的には、SSL 対応のページで使用するグラフィックスの数またはサイズ、あるいはその両方を削減することが推奨されます。このプロパティを使用して、SSL が有効ではない要求の場合は高解像度のグラフィックスを表示し、SSL 要求の場合は低解像度のグラフィックスを表示するようにできます。

 
Path

stringvar = Request.Path

 
 

現在のクライアント要求の仮想パスを保持する文字列を返します。仮想パスには、アプリケーションのルートフォルダの名前、要求パス内のサブフォルダ、および要求したファイル名が含まれます。

 
パラメータ
 
  • stringvar
      ファイルパスを受け取る文字列変数です。
 

次の例では、ユーザーに Path プロパティを表示します。

 
Sub Page_Load(  )
   Dim path As String
   path = Request.FilePath
   Message.Text = "The virtual path of the current request is: " & path
End Sub
 
メモ

このプロパティは、本章の前の部分で説明した FilePath プロパティと等価です。

 
PathInfo

stringvar = Request.PathInfo

 
 

現在の要求と共に渡される任意の詳細なパス情報を保持する文字列を返します。詳細なパス情報には、要求したリソースのファイル名の後の URL に付加されるパス情報などが含まれます。

 
パラメータ
 
  • stringvar
      詳細なパス情報を受け取る文字列変数です。
 

次の例では、クライアントブラウザに Path プロパティと PathInfo プロパティの両方を書き込みます。

 
Sub Page_Load(  )
   Message.Text = "Path = " & Request.Path & "<br/>"
   Message.Text &= "Additional Path Info = " & Request.PathInfo & "<br/>"
End Sub
 
メモ

PathInfo は、クエリー文字列の値などの情報は返しません。PathInfo は、リソースまたはファイルの名前の後のスラッシュ (/) に続く文字を、スラッシュ自体も含めてすべて返します。

 
PhysicalApplicationPath

stringvar = Request.PhysicalApplicationPath

 
 

現在のアプリケーションのルートへの物理パスを保持する文字列を返します。

 
パラメータ
 
  • stringvar
      アプリケーションのパスを受け取る文字列変数です。
 

次の例では、PhysicalApplicationPath プロパティをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim physAppPath As String
   physAppPath = Request.PhysicalApplicationPath
   Message.Text = "Physical Application Path = " & physAppPath
End Sub
 
メモ

このプロパティは、ファイルの作成やファイルへの書き込みを Web アプリケーション内で行う必要がある場合に役立ちます。ページにファイルシステムのパスをハードコーディングするのではなく、このプロパティとファイル名を組み合わせて使用して、ページの場所とは無関係に、コードが記述されたページと同じフォルダでファイルの作成および編集を行うことができます。

 
PhysicalPath

stringvar = Request.PhysicalPath

 
 

要求したファイルへの物理パスを保持する文字列を返します。

 
パラメータ
 
  • stringvar
      物理パスを受け取る文字列変数です。
 

次の例では、PhysicalPath プロパティをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim physicalPath As String
   physicalPath = Request.PhysicalPath
   Message.Text = "Physical Path = " & physicalPath
End Sub
 
メモ

アプリケーションのルートへのパスだけを返す PhysicalApplicationPath とは異なり、PhysicalPath プロパティは、途中のすべてのフォルダやリソースのファイル名を含めて、要求したリソースの物理的なフルパスを返します。このプロパティは、読み取りや書き込みを行おうとしているファイルが見つからない、または作成したファイルが想定した場所に存在しないなどのトラブルシューティングを行う状況では、ASP.NET のトレース機能と組み合わせて使用すると役立ちます。ページに Trace.Write ステートメントを追加して、トレースログに Path プロパティ、PhysicalApplicationPath プロパティ、および PhysicalPath プロパティを書き込むと、このようなバグの追跡に役立ちます。トレースログは Trace="true" 属性を @ Page ディレクティブに追加することにより有効にできます。

 
RawUrl

stringvar = Request.RawUrl

 
 

現在の要求の未加工の URL を保持する文字列を返します。未加工の URL は、ドメイン情報に続く URL 部分から構成されます。したがって、URL http://search.support.microsoft.com/kb/c.asp の場合は、未加工の URL は /kb/c.asp になります。未加工の URL にクエリー文字列が存在する場合はそれも含みます。

 
パラメータ
 
  • stringvar
      未加工の URL を受け取る文字列変数です。
 

次の例では、RawUrl プロパティをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim stringvar As String
   stringvar = Request.RawUrl
   Message.Text = "The raw URL is: " & stringvar
End Sub
 
RequestType

stringvar = Request.RequestType

 
 

RequestType プロパティは、現在の要求のタイプ (GET や POST など) を保持する文字列を返します。

 
パラメータ
 
  • stringvar
      要求のタイプを受け取る文字列変数です。
 

次の例では、RequestType プロパティをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim stringvar As String
   stringvar = Request.RequestType
   Message.Text = "The request type is: " & stringvar
End Sub
 
メモ

このプロパティは読み取りと書き込みの両用として記載されていますが、このプロパティの値を変更しなければならない状況は実際にはありません。このプロパティを読み取り用とした見た場合は、本章の前の部分で説明した読み取り専用の HttpMethod プロパティと同じ情報を返します。このプロパティの値を変更しても、その変更により HttpMethod の値が変わることはありません。

 
TotalBytes

intvar = Request.TotalBytes

 
 

HTTP 要求の本文のサイズを表す整数値を返します。TotalBytes プロパティには、HTTP 要求ヘッダのサイズ、または GET 要求と共に渡されるクエリー文字列の値のサイズは含まれません。

 
パラメータ
 
  • intvar
      現在行われている要求の本文のサイズをバイト単位で受け取る整数変数です。
 

次の例では、TotalBytes プロパティをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim intvar As Integer
   intvar = Request.TotalBytes
   Message.Text = "The size of the current request body is: <br/>"
   Message.Text &= intvar & " bytes."
End Sub
 

次のコードを使用して、サンプルページにポストすることができます。

 
<html>
   <head>
      <title>Submit a named parameter via POST</title>
   </head>
<body>
   <form id="form1" action="TotalBytes.aspx" method="POST">
      <h3>Name:</h3>
      <input type="text" name="name">
      <input type="submit">
   </form>
</body>
</html>
 
メモ

このプロパティの動作は、本章の前の部分で説明した ContentLength プロパティの動作と等価です。

 
Url

uriObj = Request.Url

 
 

ユーザーが要求した現在の URL を説明するプロパティを保持する Uri クラスのインスタンスを返します。Uri クラスによって公開されるプロパティには、Scheme (プロトコル)、Port、および Host があります。

 
パラメータ
 
  • uriObj
      Uri 型のオブジェクト変数です。
 

次の例では、Url プロパティが返す Uri オブジェクトを使用して、現在の要求の URL に関する情報をブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim myUri As Uri
   myUri = Request.Url

   Message.Text = "Current request URL info - <br/><br/>"
   Message.Text &= "Protocol: " & myUri.Scheme & "<br/>"
   Message.Text &= "Port: " & myUri.Port & "<br/>"
   Message.Text &= "Host Name: " & myUri.Host & "<br/>"
End Sub
 
メモ

このプロパティが返す Uri クラスには、プロパティだけでなくメソッドもありますが、これらのメソッド (特に CheckHostName メソッドと CheckSchemeName メソッド) を使用するのは、Url プロパティから Uri インスタンスを受け取るときではなく、独自の Uri リソースを最初から作成する場合です。

 

URI に関するメモ : URI (Uniform Resource Identifier) は、URL (Uniform Resource Locator) と比較すると、URL および URN のより一般的なバージョンです。現在、多くの場合に URI と URL は同じ意味に使われますが、この状況は URN がより頻繁に使われるようになるにつれて変化していく可能性があります。Url プロパティでは、これらの用語は同じ意味を持ちます。

 
UrlReferrer

uriObj = Request.UrlReferrer

 
 

現在要求されているリソースへのナビゲート元となるリソースの URL を説明するプロパティを保持する Uri クラスのインスタンスを返します。現在のリソースへのナビゲートが行われなかった場合、つまり、現在のリソースに直接アクセスした場合、UrlReferrer プロパティは Nothing を返します。

 
パラメータ
 
  • uriObj
      Uri 型のオブジェクト変数です。
 

次の例では、UrlReferrer プロパティが返した Uri オブジェクトを使用して、参照しているリソースの URL に関する情報をブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim myUri As Uri
   myUri = Request.UrlReferrer

   If Not (myUri Is Nothing) Then
      Message.Text = "Referral URL info - <br/><br/>"
      Message.Text &= "Protocol: " & myUri.Scheme & "<br/>"
      Message.Text &= "Port: " & myUri.Port & "<br/>"
      Message.Text &= "Host Name: " & myUri.Host & "<br/>"
      Message.Text &= "App Path: " & myUri.AbsolutePath & "<br/>"
   Else
      Message.Text = "No referral URL info available."
   End If
End Sub
 

次のコードを使用して、サンプルページにリンクできます。

 
<html>
   <head>
      <title>Link to UrlReferrer</title>
   </head>
<body>
   <a href="UrlReferrer.aspx">Go to UrlReferrer.aspx</a>
</body>
</html>
 
メモ

このコード例では、UrlReferrer プロパティが Uri クラスの有効なインスタンスを返すことを確認します。別のページ上のリンクからではなく、直接ページにアクセスした場合は、UrlReferrer プロパティが Nothing を返します。

 
UserAgent

stringvar = Request.UserAgent

 
 

User-Agent ヘッダを保持する文字列を返します。User-Agent 文字列は、クライアントが要求を行うために使用するブラウザ、または携帯電話などで使用するその他の HTTP 対応のクライアントソフトウェアを識別します。ブラウザやプラットフォームによっては、この文字列により、クライアントが使用するオペレーティングシステムを識別し、また Internet Explorer の場合にはインストールされている .NET Framework のバージョンを識別することができます。

 
パラメータ
 
  • stringvar
      User-Agent 文字列を受け取る文字列変数です。
 

次の例では、UserAgent プロパティをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim stringvar As String
   stringvar = Request.UserAgent
   Message.Text = "User Agent: " & stringvar
End Sub
 
メモ

クライアントブラウザの機能を識別する場合は、通常、Request.Browser プロパティによって返される HttpBrowserCapabilities オブジェクトのプロパティを使用すると容易に識別できます。ただし、特定のクライアントの User-Agent が HttpBrowserCapabilities クラスによって確認されていない情報を返す場合があります。この場合、"machine.config" の <browserCaps> 構成セクションハンドラーに目的の情報を追加し (ASP.NET 構成の詳細については、第 8 章および第 20 章を参照)、次に、組み込みのクラスから継承することによって、また必要な User-Agent 属性用の独自のプロパティを追加することによって、HttpBrowserCapabilities クラスの独自のバージョンを作成します。このような作業を回避したい場合には、UserAgent プロパティを使用して、目的の属性に関する User-Agent 文字列を単に解析することができます。

 
UserHostAddress

stringvar = Request.UserHostAddress

 
 

要求を行ったクライアントの IP アドレス を返します。

 
パラメータ
 
  • stringvar
      クライアントの IP アドレスを受け取る文字列変数です。
 

次の例では、UserHostAddress、UserHostName、および UserLanguages の各プロパティをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim HostAddress, HostName, Languages(  ) As String
   Dim iCounter As Integer

   HostAddress = Request.UserHostAddress
   HostName = Request.UserHostName
   Languages = Request.UserLanguages

   Message.Text = "Client IP Address: " & HostAddress & "<br/>"
   Message.Text &= "Client Machine Name: " & HostName & "<br/>"
   For iCounter = 0 To Languages.GetUpperBound(0)
      Message.Text &= "Client Language " & iCounter & ": " & _
         CStr(Languages(iCounter)) & "<br/>"
   Next iCounter
End Sub
 
UserHostName
パラメータ

stringvar = Request.UserHostName

 

要求を行っているクライアントの DNS ホスト名を保持する文字列 を返します。

 
 
  • stringvar
      ホスト名を受け取る文字列変数です。
 

UserHostAddress プロパティの例を参照してください。

 
メモ

クライアントの IP アドレスを DNS 名に解決する DNS サーバーが利用できない場合、UserHostName プロパティは UserHostAddress プロパティと同様にクライアントの IP アドレスを返します。

 
UserLanguages

stringArray = Request.UserLanguages

 
 

クライアントによってサポートされる言語の一覧を保持する並べ替え済みの文字列配列 を返します。

 
パラメータ
 
  • stringArray
      クライアントがサポートする言語の一覧を受け取る文字列配列変数です。
 

UserHostAddress プロパティの例を参照してください。

 
メモ

このプロパティをテストするために、追加言語のサポートをブラウザに設定できます。

 
  1. Internet Explorer 6 の場合は、[ツール] メニューの [インターネット オプション...] を選択します。[インターネット オプション] ダイアログの [全般] タブで、[言語...] ボタンをクリックします。[言語の優先順位] ダイアログを使用して、[言語] の一覧で言語を追加、削除、または上下に移動します。
  2. Netscape Navigator 6 の場合は、[編集] メニューの [設定...] を選択し、次に、左側のツリービューで [言語] ノードを選択します。右側のオプションを使用して、一覧上で言語を追加、削除、または上下に移動します。
 

これで、UserHostAddress の例にあるコードが記述されたページを参照すると、選択したすべての言語が選択した順に一覧表示されます。

 
Cookies

HttpCookieCollection = Request.Cookies

 
 

Cookies コレクションは、現在の要求の一部として送信された Cookie すべてを保持する HttpCookieCollection クラスのインスタンスを返します。HttpCookieCollection クラスには、クライアント要求の一部として渡された Cookie それぞれに対応する HttpCookie クラスのインスタンスが保持されています。また、Cookie に関する情報にアクセスするには、これら HttpCookie インスタンスのプロパティを利用することができます。

 

従来の ASP と同様に、Cookies コレクションは 1 つのコレクションとして実装されます。現に、HttpCookieCollection は .NET NameObjectCollectionBase クラスを継承しています。しかし、ASP.NET が実装するのは、文字列キーと文字列値のコレクションではなく、文字列キーとオブジェクト (HttpCookie クラスのインスタンス) のコレクションです。個々の Cookie は HttpCookie 型の変数に渡されます。また、Cookie の各値にはクラスのプロパティを使用することによってアクセスできます。

 

複数の値を持つディクショナリ形式の Cookie には、HttpCookie クラスの Values プロパティを介してアクセスできます。このクラスは、Cookie のサブキーと値を保持する NameValueCollection を返します。また、次の構文のように、個々のキーを使用してそれぞれの値を取得することもできます。

 
HttpCookie.Values("keyname")
 
パラメータ
 
  • HttpCookieCollection
      HttpCookieCollection 型のオブジェクト変数です。
 

次の例では、Cookies プロパティから Cookie のコレクションを取得し、各キーと値を、ディクショナリ Cookie の任意のサブキーと共に書き出します。

 
Sub Page_Load(  )
   Dim Counter1, Counter2 As Integer
   Dim Keys(), SubKeys(  ) As String
   Dim CookieColl As HttpCookieCollection
   Dim Cookie As HttpCookie

   ' Get Cookie collection
   CookieColl = Request.Cookies

   ' Get Cookie keys
   Keys = CookieColl.AllKeys

   ' Get cookies by index
   For Counter1 = 0 To Keys.GetUpperBound(0)
      Cookie = CookieColl(Keys(Counter1))
      Message.Text = "Cookie: " & Cookie.Name & "<br/>"
      Message.Text &= "Expires: " & Cookie.Expires & "<br/>"

      ' Get keys for dictionary cookie into an array
      SubKeys = Cookie.Values.AllKeys
      ' Write dictionary cookie values to the browser
      For Counter2 = 0 To SubKeys.GetUpperBound(0)
         Message.Text &= "Key " & CStr(Counter2) + ": " & _
            SubKeys(Counter2) & "<br/>"
         Message.Text &= "Value " & CStr(Counter2) + ": " & _
            Cookie.Values(Counter2) & "<br/>"
      Next Counter2
      Message.Text &= "<br/>"
   Next Counter1
End Sub
 
メモ

ASP が実装する Cookies コレクションおよび Cookies プロパティによって返される HttpCookieCollection クラスは、共通のプロパティセットを公開します。共通のプロパティセットについては、本章の 16.3 項で説明しています。

 

ASP.NET の場合も個々の Cookie を Cookie のテキストキーおよび数値インデックスを使用して取得できますが、操作が異なるため、ASP の Cookie 処理コードを ASP.NET に包括的に移行する場合は、大幅な変更が必要になります。たとえば、次のコードでは例外が発生します。

 
For Each strKey In Request.Cookies
   Response.Write strKey & " = " & Request.Cookies(strKey) & _
                  "<br/>"
   If Request.Cookies(strKey).HasKeys Then
      For Each strSubKey In Request.Cookies(strKey)
         Response.Write "->" & strKey & "(" & strSubKey & _
            ") = " & Request.Cookies(strKey)(strSubKey) & "<br/>"
      Next
   End If
Next
 

ASP.NET ではデフォルトで変数および変数の型の両方が必要ですが、このコードではこれらが明示的に宣言されていません。また、Request.Cookies(key) プロパティから返されるのが文字列ではなく HttpCookie インスタンスであるため、このコードは失敗します。文字列を必要とする Response.Write ステートメント用に、HttpCookie インスタンスを文字列に暗黙に変換することはできません。また、Request.Cookies(key) を呼び出しても、ディクショナリ Cookie のサブキーは取得されません。幸い、前述のコードを機能させるための変更は、次に示すようにかなり単純です。

 
For Each strKey In Request.Cookies
   Message.Text = strKey & " = " & _
      Request.Cookies(strKey).ToString(  ) & "<br/>"
   If Request.Cookies(strKey).HasKeys Then
      For Each strSubKey In Request.Cookies(strKey).Values
         Message.Text = "->" & strKey & "(" & strSubKey & _
            ") = " & Request.Cookies(strKey)(strSubKey).ToString(  ) _
            & "<br/>"
      Next
   End If
Next
 

最初の問題点を解決するには、HttpCookie の Value メソッドを使用して、Cookie の値を文字列として取得します。2 番目の問題点の解決策は、HttpCookie インスタンスの Values プロパティを呼び出すことです。これにより、ディクショナリ Cookie のサブキーを取得できます。

 

ASP ではテキストベースで行っていた Cookie のキーや値の操作が、ASP.NET ではクラスベースの操作に変更になったことにより、Cookie に対する読み取りや書き込みを行う場合に、HttpCookie クラスの Expires プロパティを利用できるようになりました。ASP では、Cookie の Expires プロパティの読み取りを試みると、エラーになります。残念ながら、これを執筆している時点では、HttpCookie の Expires プロパティは実際には Cookie の有効期限を返しません。代わりに、値 12:00:00 AM を返します。このことはプロパティが読み取り可能であるにもかかわらず、読み取り用にデザインされていないことを示します。

 

最後に、従来の ASP とは異なり、ASP.NET のコレクションはゼロ (0) から始まるので、すべてのコレクションや配列の最初の要素は 1 ではなく 0 になります。このことは、インデックスにより値を取得する際に覚えておく必要のある重要な点です。

 
Files

HttpFileCollection = Request.Files

 
 

ASP.NET で新しく導入された Files コレクションは、ユーザーの現在の要求によってアップロードされるすべてのファイルを保持する HttpFileCollection 型のコレクションを返します。このコレクションは、HtmlInputFile サーバーコントロールと組み合わせて使用すると特に役立ちます。HtmlInputFile サーバーコントロールは、HTTP POST 要求を介してファイルをアップロードするために必要な基本機能を提供します。ユーザーが送信ページの HtmlInputFile コントロールごとにファイルを送信する場合は、Files コレクションを使用することによりファイルを取得できます。

 
パラメータ
 
  • HttpFileCollection
      HttpFileCollection 型のオブジェクト変数です。
 

次の例では、2 つの HtmlInputFile サーバーコントロール、およびサーバー側の <script> ブロックを使用して、ファイルのアップロードおよび処理を行います。この例では、ページの <form> セクションとそのコントロール、および HtmlInputButton コントロールの onServerClick イベントによって呼び出される UploadBtn_OnClick メソッドが記述された <script> ブロックの両方を示します。

 
<!--Place between the <head> and </head> tags -->
<script runat="server">
   Sub UploadBtn_Click(Sender as Object, e as EventArgs)
      UploadForm.Visible = False
      If InStr(Request.ContentType, "multipart/form-data") Then
         Dim Counter1 As Integer
         Dim Keys(  ) As String
         Dim Files As HttpFileCollection

         ' Load File collection
         Files = Request.Files
         ' Get names of all files into an array
         Keys = Files.AllKeys
         For Counter1 = 0 To Keys.GetUpperBound(0)
            Message.Text &= "File ID: " & Keys(Counter1) & "<br/>"
            Message.Text &= "File Name/Path: " & _
               Files(Counter1).FileName & "<br/>"
         Next Counter1
      Else
         Message.Text = "Wrong content type!"
      End If
   End Sub
</script>

<!-- This section resides between the <body> and </body> tags -->
<form id="UploadForm" enctype="multipart/form-data" runat="server">
   Select File To Upload to Server:
   <br/>
   <%-- MyFile and MyFile2 are HtmlInputFile controls --%>
   <%-- note the runat attribute --%>
   <input id="MyFile" type="file" runat="server">
   <br/>
   <input id="MyFile2" type="file" runat="server">
   <br/>
   <input id="Submit1" type="submit" value="Upload!"
      onserverclick="UploadBtn_Click" runat="server" >
</form>
<asp:label id="Message" runat="server"/>
 
メモ

従来の ASP では、ファイルのアップロードは面倒な作業でした。通常は、受信 ASP ページで使用するサードパーティのアップロードコントロールを探して購入し、アップロードしたファイルの解析および保存を行う必要がありました。Files コレクションにより、サードパーティのコントロールを探し、その使用方法を調べて、ファイルをアップロードする必要がなくなりました。このことは、コントロールのデベロッパーにとっては残念なことですが、新しいサーバーコントロールを作成することによってその損失を十分に補うであろうと思われます。一方、ASP.NET のデベロッパーにとっては喜ばしいことです。

 

Files コレクションが正しくファイルをアップロードするために、次の 2 つの重要な点を留意してください。

 
  1. runat="server" 属性が設定されていないクライアントサイドの HTML フォームを使用している場合は、フォームの method 属性を POST に設定します。
  2. フォームの enctype 属性を multipart/form-data に設定します。
 

アップロードは、両方の手順を行った場合のみ成功します。コード例では、ファイルの取得を試みる前に、着信要求が multipart/form-data かどうかを確認しています。

 

ファイルをアップロードするために HtmlInputFile コントロールを使用する必要はありません。ファイルは、Files コレクションを介して取得できます。送信ページで POST メソッドと multipart/form-data enctype 属性を使用している限り、標準の HTML ファイルの入力タグを使用できます。

 
<input type="file" id="myFile" name="myFile">
 

name 属性を使用していることに注意してください。この属性を指定しないと、Files コレクションはそのコントロール用にアップロードしたファイルを保持しません。

 
Form

NameValueCollection = Request.Form

 
 

Form コレクションは、HTTP POST 要求と共に渡されたすべてのフォームフィールドを保持する NameValueCollection クラスのインスタンスを返します。このコレクションは、HTTP 要求の Content-Type が application/x-www-form-urlencoded または multipart/form-data のいずれかの場合のみデータを保持します。

 

データの送信に使用した HTTP メソッドに応じてデータを取得する方法は 2 つあり、Form コレクションはそのうちの 1 つです。Form コレクションは、method 属性が POST に設定された HTML フォームによって送信されたデータを取得します。一方、QueryString コレクションは、method 属性が GET に設定された HTML フォームによって送信されたデータを取得します。QueryString コレクションについては、本項の後の部分で説明します。

 
パラメータ
 
  • NameValueCollection
      NameValueCollection 型のオブジェクト変数です。
 

次の例では、ASP.NET により、単一のページから HTTP POST 経由で値を送信し、その値を取得してユーザーに表示する方法を示します。この例では、Page クラスの IsPostBack プロパティを使用して、送信されているフォームの結果による要求かどうかを判断します。要求がポストバックではない場合は、ユーザーが値を入力できるように、フォームフィールドが表示されます。要求がポストバックの場合は、ページにより Form コレクションが取得され、ブラウザに各フィールドの名前と値が表示されます。

 
Sub Page_Load(  )
   If IsPostBack Then
      Form1.Visible = False
      If Request.HttpMethod = "POST" Then
         Dim Counter1 As Integer
         Dim Keys(  ) As String
         Dim FormElements As NameValueCollection

         ' Get Form keys/elements
         FormElements=Request.Form
         ' Get names of form fields into array
         Keys = FormElements.AllKeys
         For Counter1 = 0 To Keys.GetUpperBound(0)
            Message.Text &= "Form " & Counter1 & " name: " & _
               Keys(Counter1) & "<br/>"
            Message.Text &= "Form " & Counter1 & " value: " & _
               FormElements(Counter1) & "<br/>"
         Next Counter1
      End If
   Else
      Form1.Visible = True
   End If
End Sub

<!-- This section resides between the <body> and </body> tags -->
<form id="Form1" runat="server">
   First Name:
   <br/>
   <asp:Textbox id="txtFName" runat="server"/>
   <br/>
   Last Name:
   <br/>
   <asp:Textbox id="txtLName" runat="server"/>
   <br/>
   <asp:Button id="Submit" Text="Submit" runat="server"/>
</form>
<asp:label id="Message" runat="server"/>
 
メモ

Form コレクションは本章の 16.3 項で説明しているプロパティとメソッドを公開し、さらに次のメソッドを追加しています。

 
 
  • Get(Index|Key)
      NameValueCollection 内の指定した項目のコンテンツをコンマで区切った文字列として返します。
  • GetValues(Index|Key)
      NameValueCollection 内の指定した項目のコンテンツを文字列配列として返します。
 
Headers

NameValueCollection = Request.Headers

 
 

Headers コレクションは、現在の要求と共に送信されたすべての HTTP ヘッダを保持する NameValueCollection クラスのインスタンスを返します。このコレクションは、ALL_HTTP キーを指定して Request.ServerVariables コレクションを呼び出すことによって返される情報と同じ情報を提供します。

 
パラメータ
 
  • NameValueCollection
      NameValueCollection 型のオブジェクト変数です。
 

次の例では、最初に ServerVariables("ALL_HTTP") メソッドを使用し、次に Headers コレクションを使用することによって、要求と共に渡された HTTP ヘッダをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim AllHttp As String
   ' Get a String with all the HTTP headers
   AllHttp = Request.ServerVariables("ALL_HTTP")
   ' Use Replace to format the String
   AllHttp = Replace(AllHttp, "HTTP", "<br/>HTTP"
   Message.Text &= AllHttp & "<br/><br/>"

   Dim Counter1, Counter2 As Integer
   Dim Keys(), subKeys(  ) As String
   Dim HeaderColl As NameValueCollection

   ' Load Headers into NameValueCollection
   HeaderColl=Request.Headers
   ' Get keys into an array
   Keys = HeaderColl.AllKeys
   For Counter1 = 0 To Keys.GetUpperBound(0)
      Message.Text &= "Key: " & Keys(Counter1) & "<br/>"
      ' Get all values under this key
      subKeys = HeaderColl.GetValues(Counter1)
      For Counter2 = 0 To subKeys.GetUpperBound(0)
         Message.Text &= "Value " & CStr(Counter2) & ": " & _
            subKeys(Counter2) & "<br/>"
      Next Counter2
   Next Counter1
End Sub
 
メモ

Headers コレクションは、現在の要求の一部として送信された HTTP ヘッダのみを返し、一方、ServerVariables コレクションは、値が渡されたかどうかにかかわらず、各 HTTP ヘッダのキーを保持します。ServerVariables コレクションについては本項の後の部分で説明します。

 

HTTP ヘッダをファイルに書き込むか、またはブラウザに表示するだけであれば、ServerVariables コレクションの方が簡単に使用できる場合があります。名前によって特定の HTTP ヘッダにアクセスする、またはコレクション全体をループする必要がある場合は、Headers コレクションが適しています。

 
Params

NameValueCollection = Request.Params

 
 

Params コレクションは、QueryString、Form、ServerVariables、および Cookies の各コレクションの「キー/値」のペアを保持する NameValueCollection クラスのインスタンスを返します。Params コレクションを使用して、これらのコレクションをすべてファイルやブラウザにダンプできます。また、アプリケーションのトラブルシューティングを行うことができます。さらに、アプリケーションに渡されるフォーム値が GET 経由 (QueryString コレクション) または POST 経由 (Form コレクション) のいずれの経由であるかにかかわらず、そのフォーム値をトラックできます。

 
パラメータ
 
  • NameValueCollection
      NameValueCollection 型のオブジェクト変数です。
 

次の例では、Params コレクションに含まれるキーと値をブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim Counter1, Counter2 As Integer
   Dim Keys(), subKeys(  ) As String
   Dim ParamColl As NameValueCollection

   ' Load Params into NameValueCollection
   ParamColl=Request.Params
   ' Get keys into an array
   Keys = ParamColl.AllKeys
   For Counter1 = 0 To Keys.GetUpperBound(0)
      Message.Text &= "Key: " & Keys(Counter1) & "<br/>"
      ' Get all values under this key
      subKeys = ParamColl.GetValues(Counter1)
      For Counter2 = 0 To subKeys.GetUpperBound(0)
         Message.Text &= "Value " & CStr(Counter2) & ": " & _
            subKeys(Counter2) & "<br/>"
      Next Counter2
      Message.Text &= "<br/>"
   Next Counter1
End Sub
 

次のコードを使用して、サンプルページにポストすることができます。

 
<html>
   <head>
      <title>Submit a named parameter via POST</title>
   </head>
<body>
   <form id="form1" action="Params.aspx" method="POST">
      <h3>Name:</h3>
      <input type="text" name="name">
      <input type="submit">
   </form>
</body>
</html>
 
メモ

コレクションは、次の順序で列挙されます。

 
  1. QueryString
  2. Form
  3. Cookies
  4. ServerVariables
 

Form コレクションと QueryString コレクションの両方に値を設定する (POST メソッドを使用して、フォームの action 属性用にクエリー文字列の「名前/値」のペアを URL に追加するなど) ことができますが、通常は両方ではなく、いずれか一方を確認します。

 
QueryString

NameValueCollection = Request.QueryString

 
 

QueryString コレクションは、クエリー文字列の一部として渡されたすべてのキーと値を保持する NameValueCollection クラスのインスタンスを返します。通常、キーと値は POST メソッドではなく、GET メソッドを使用する HTML フォームを送信することにより渡されます。

 
パラメータ
 
  • NameValueCollection
      NameValueCollection 型のオブジェクト変数です。
 

次の例では、QueryString コレクションのコンテンツをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim Counter1, Counter2 As Integer
   Dim Keys(), subKeys(  ) As String
   Dim QSColl As NameValueCollection

   ' Load QS into NameValueCollection
   QSColl=Request.QueryString
   ' Get keys into an array
   Keys = QSColl.AllKeys
   For Counter1 = 0 To Keys.GetUpperBound(0)
     Message.Text &= "Key: " & Keys(Counter1) & "<br/>"
     subKeys = QSCol1.GetValues(Counter1) 'Get all values under this key
     For Counter2 = 0 To subKeys.GetUpperBound(0)
        Message.Text &= "Value " & CStr(Counter2) & ": " & _
           subKeys(Counter2) & "<br/>"
     Next Counter2
     Message.Text &= "<br/>"
  Next Counter1
End Sub
 

次のコードを使用して、サンプルページにポストできます。ここでは、Form の method 属性が GET に設定されています。これは、クエリー文字列の一部として送信されるフォーム値に必要です。

 
<html>
   <head>
      <title>Submit a named parameter via POST</title>
   </head>
<body>
   <form id="form1" action="QueryString.aspx" method="GET">
      <h3>Name:</h3>
      <input type="text" name="name">
      <input type="submit">
   </form>
</body>
</html>
 
メモ

QueryString コレクションの Form コレクションに対する利点の 1 つは、コレクションを使用するために、ユーザーが必ずしもフォームを送信する必要がないことです。クエリー文字列の値は URL に追加されるので、クエリー文字列をページ内のリンクに静的に追加することや、クエリー文字列値が追加されたアンカータグを動的に作成することは比較的簡単です。実際、多くのオンラインストアがこの方法を使用して、商品を表示するようにデザインされたページへのリンクに商品 ID を付加して渡すことでカタログページを運用しています。商品を表示するページは、QueryString コレクションを使用して商品 ID を取得できます。

 

クエリー文字列の値はプレーンテキストとして URL に付加して渡されるので、POST 操作の結果として渡される値に比べて改ざんに対する脆弱性が高まります。重要なデータまたは改ざんされるとアプリケーションで問題が生じる可能性のあるデータを渡す場合は、そのデータをクエリー文字列に追加する前に値を暗号化するか、または別の方法で値を渡すことを検討する必要があります。

 

クエリー文字列の処理で使用される、&、?、%、+ などの特定の文字は、「キー/値」のペアで使用される場合、およびクエリー文字列内での特殊文字として機能する場合との間での混乱を避けるために、エンコードする必要があります。次の表に、それぞれの特殊文字のエンコードを示します。

 
文字エンコード
&%26
?%3f
%%25
+%2b
スペース%20
 

HttpServerUtility クラスが提供する UrlEncode メソッドを使用すると、メソッドに渡された文字列内のすべての特殊文字が適切なエンコードに自動的に置き換えられるので、これらの値を覚えておく必要はありません。HttpServerUtility クラスについては、第 18 章で説明します。

 
ServerVariables

NameValueCollection = Request.ServerVariables

 
 
パラメータ
 
  • NameValueCollection
      NameValueCollection 型のオブジェクト変数です。
 

次の例では、コレクションに関する前述の例と同様に、ServerVariables コレクションのコンテンツをブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim Counter1, Counter2 As Integer
   Dim Keys(), subKeys(  ) As String
   Dim SVarsColl As NameValueCollection

   ' Load ServerVariables into NameValueCollection
   SVarsColl=Request.ServerVariables
   ' Get keys into an array
   Keys = SVarsColl.AllKeys
   For Counter1 = 0 To Keys.GetUpperBound(0)
      Message.Text &= "Key: " & Keys(Counter1) & "<br/>"
      subKeys = SVarsColl.GetValues(Counter1)
      ' Get all values under this key
      For Counter2 = 0 To subKeys.GetUpperBound(0)
         Message.Text &= "Value " & CStr(Counter2) & ": " & _
            subKeys(Counter2) & "<br/>"
      Next Counter2
      Message.Text &= "<br/>"
   Next Counter1
End Sub
 
メモ

キーがわかっていれば、Keys 全体をループしてすべての値を取得するだけでなく、個別の値にアクセスできます。次の一覧に、ServerVariable コレクションで利用可能なキーを示します。

 
 
  • ALL_HTTP
      HTTP_headername という形式の各ヘッダ名と共にすべての HTTP ヘッダを保持する文字列を返します。ここで、headername はすべてが大文字の HTTP ヘッダの名前です。
  • ALL_RAW
      ALL_HTTP と同じ情報を提供しますが、ヘッダ名はすべて大文字にならず、HTTP_ という接頭辞も付きません。
  • APPL_MD_PATH
      IIS メタベース内のアプリケーションのパスを返します。
  • APPL_PHYSICAL_PATH
      APPL_MD_PATH に対応する物理パスを返します。
  • AUTH_TYPE
      保護されたコンテンツに対するアクセスの検証に使用する認証手法を返します。
  • AUTH_USER
      認証済みのユーザーのユーザー名をそのままの形式で返します。
  • AUTH_PASSWORD
      基本認証が使用されたと想定して、ブラウザの認証ダイアログで入力されたパスワードを返します。
  • LOGON_USER
      現在のユーザーがログインしている Windows アカウントの名前を返します。
  • REMOTE_USER
      認証のフィルタリングが行われる前に、ブラウザが送信したユーザー名の文字列を返します。
  • CERT_COOKIE
      クライアント証明書の一意の文字列識別子を返します。
  • CERT_FLAGS
      証明書が存在するかどうか (ビット 0)、およびクライアント証明書の証明機関がサーバーで認証済み証明機関の一覧に存在するかどうか (ビット 1) を表すビットフラグを返します。
  • CERT_ISSUER
      クライアント証明書の発行者を返します。
  • CERT_KEYSIZE
      40、128 などの SSL キーのビット数を返します。
  • CERT_SECRETKEYSIZE
      サーバーの秘密キーのビット数を返します。
  • CERT_SERIALNUMBER
      クライアント証明書のシリアル番号を返します。
  • CERT_SERVER_ISSUER
      サーバー証明書の発行者を返します。
  • CERT_SERVER_SUBJECT
      サーバー証明書のサブジェクトフィールドを返します。
  • CERT_SUBJECT
      クライアント証明書のサブジェクトフィールドを返します。
  • CONTENT_LENGTH
      HTTP 要求の本文のコンテンツの長さを返します。
  • CONTENT_TYPE
      HTTP 要求のコンテンツの MIME タイプを返します。
  • GATEWAY_INTERFACE
      サーバーが使用する CGI 仕様のリビジョン番号を返します。
  • HTTPS
      要求が Secure Socket Layer (HTTPS) 接続経由で行われたかどうかによって、on または off のいずれかを返します。
  • HTTPS_KEYSIZE
      SSL キーのサイズをビット単位で返します。
  • HTTPS_SECRETKEYSIZE
      サーバーの秘密キーのビット数を返します。
  • HTTPS_SERVER_ISSUER
      サーバー証明書の発行者を返します。
  • HTTPS_SERVER_SUBJECT
      サーバー証明書のサブジェクトフィールドを返します。
  • INSTANCE_ID
      要求に関連付けられた IIS インスタンスの ID を返します。IIS のインスタンスが複数実行されていない限り、この値は常に 1 になります。
  • INSTANCE_META_PATH
      現在の要求に応答する IIS インスタンスのメタベースパスを返します。
  • LOCAL_ADDR
      要求を受け取ったサーバーのアドレスを返します。複数の NIC および IP アドレスを持つサーバーで、要求を受け取ったアドレスを判断する場合に役立ちます。
  • PATH_INFO
      要求と共に渡されたすべての詳細パス情報を返します。詳細については、本章の前の部分で説明した PathInfo プロパティを参照してください。
  • PATH_TRANSLATED
      要求の仮想パスに対応する物理パスを返します。
  • QUERY_STRING
      要求と共に渡された未加工のクエリー文字列が存在する場合は、その文字列を返します。
  • REMOTE_ADDR
      要求を行っているマシンの IP アドレスを返します。
  • REMOTE_HOST
      利用可能な場合は、要求を行っているマシンの DNS 名を返します。そうでない場合は、IP アドレスを返します。
  • REQUEST_METHOD
      要求で使用されている GET、POST などの HTTP 要求メソッドを返します。
  • SCRIPT_NAME
      実行中のページへの仮想パスを返します。
  • SERVER_NAME
      サーバーの名前、DNS 名、または IP アドレスを返します。
  • SERVER_PORT
      要求を受け取ったポートの番号を返します。
  • SERVER_PORT_SECURE
      セキュリティで保護されたポート (1) または保護されていないポート (0) のどちらで要求を受け取ったかに応じて、0 または 1 のいずれかを含む文字列を返します。
  • SERVER_PROTOCOL
      クライアント要求の処理に使用されるプロトコルの名前とバージョンを返します。IE 5.5 と IIS 5 の場合、名前とバージョンは "HTTP/1.1" になります。
  • SERVER_SOFTWARE
      Web サーバーソフトウェアの名前とバージョンを返します。
  • URL
      要求の基本 URLを返します。このデータはドメイン名の後のすべての情報に該当します。
  • HTTP_CONNECTION
      確立された接続のタイプを返します。
  • HTTP_ACCEPT
      HTTP Accept ヘッダの値を返します。
  • HTTP_ACCEPT_ENCODING
      HTTP Accept-Encoding ヘッダの値を返します。
  • HTTP_ACCEPT_LANGUAGE
      HTTP Accept-Language ヘッダの値を返します。
  • HTTP_HOST
      HTTP Host ヘッダの値を返します。
  • HTTP_USER_AGENT
      HTTP User-Agent ヘッダの値を返します。
 
BinaryRead

byteArray = Request.BinaryRead(byteCount)

 
 

byteCount パラメータで指定されたバイト数が格納されたバイト配列 を返します。

 
パラメータ
 
  • byteArray
      メソッドから指定したバイト数を受け取るバイト型の配列変数です。
  • byteCount
      返されるバイト数を指定する整数です。
 
メモ

このメソッドによって、従来の ASP アプリケーションとの下位互換性が実現されます。新規の開発では、Files コレクションなどの別の方法を使用して、BinaryRead メソッドを使用した場合と同じ結果を実現することをお勧めします。

 
MapPath

stringvar = Request.MapPath(virtualPath)
stringvar = Request.MapPath(virtualPath, _ baseVirtualDirectory, allowCrossMapping)

 
 

従来の ASP では Server オブジェクトが公開していた MapPath メソッドを使用して、指定された仮想パスに対するサーバー上の物理パスを取得できます。ASP.NET では、MapPath メソッドがオーバーロードされ、前述のコードで示したように、2 つの異なるパラメータセットを使用して呼び出すことができます。従来の ASP と同じ最初の形式では、単純に、マップされた仮想パスを保持する文字列で渡します。2 番目の形式では、相対パスを解決するための基本ディレクトリを指定する baseVirtualDirectory パラメータ、および他のアプリケーションに属する仮想パスをマップできる allowCrossMapping パラメータが追加されています。

 
パラメータ
 
  • stringvar
      マップされた物理パスを受け取る文字列変数です。
  • virtualPath
      マップする仮想パスを保持する文字列パラメータです。
  • baseVirtualDirectory
      相対パスの解決に使用する基本パスを保持する文字列パラメータです。
  • allowCrossMapping
      パスがアプリケーション間でマップされる可能性の有無を示すブール値パラメータです。
 

次の例では、.NET Framework SDK サンプルの /QuickStart ディレクトリのパスをマップし、その結果をブラウザに書き込みます。

 
Sub Page_Load(  )
   Dim VirPath, PhysPath, BasePath As String
   Dim BoolCross As Boolean = True

   VirPath = "/QuickStart"
   BasePath = ""

   Message.Text = Request.MapPath(VirPath, BasePath, BoolCross)
End Sub
 
メモ

前述の例では、BoolCross 変数を False に設定し、QuickStart アプリケーションの外部からサンプルコードを呼び出した場合は、HttpException がスローされます。これは、アプリケーション間でパスをマップするためには、このパラメータを True に設定する必要があるからです。

 
SaveAs

Request.SaveAs(filename, includeHeaders)

 
 

要求を保存するパスとファイル名として filename パラメータを使用し、現在の HTTP 要求をディスクに保存します。

 
パラメータ
 
  • filename
      要求を保存するパスとファイル名を保持する文字列パラメータです。
  • includeHeaders
      HTTP ヘッダ情報を要求の一部として保存するかどうかを示すブール値パラメータです。これが POST 要求、または要求の本文を持つその他のタイプの要求でない限り、このパラメータを False に設定すると情報は保存されません。
 

次の例では、比較のために HTTP 要求ヘッダをブラウザに書き込み、現在の要求をヘッダ情報なしの場合とヘッダ情報付きの場合の両方で保存します。

 
Sub Page_Load(  )
   Message.Text = Request.Headers

   ' Save HTTP Request and Headers to a file
   Request.SaveAs((Request.PhysicalApplicationPath & _
      "HTTPRequest.txt"), True)
   ' Save HTTP Request to a file
   Request.SaveAs((Request.PhysicalApplicationPath & _
      "HTTPRequest_NoHeaders.txt"), False)
End Sub
 
メモ

このメソッドにより、特定の要求で送信されるすべての情報を確認できるため、デバッグに非常に役立ちます。特に、POST 要求で役立ちます。