AcceptTypes |
stringArray = Request.AcceptTypes |
クライアントが受け入れる MIME (Multipurpose Internet Mail Extension) タイプを保持する文字列配列を返します。このプロパティを使用して、Word や Excel のようなアプリケーションのタイプなど、特定のタイプの応答をクライアントが受け入れ可能かどうかを判断できます。Word や Excel は、Internet Explorer だけがサポートしています。
次の表に、一般的な MIME タイプの一部を示します。
MIME タイプ | 説明
--- | ---
text/html | HTML テキストコンテンツ
text/xml | XML テキストコンテンツ
image/gif | GIF エンコードされたイメージデータ
image/jpg | JPEG エンコードされたイメージデータ
application/msword | Microsoft 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 プロパティの例を参照してください。
メモ
このプロパティをテストするために、追加言語のサポートをブラウザに設定できます。
Internet Explorer 6 の場合は、[ツール] メニューの [インターネット オプション...] を選択します。[インターネット オプション] ダイアログの [全般] タブで、[言語...] ボタンをクリックします。[言語の優先順位] ダイアログを使用して、[言語] の一覧で言語を追加、削除、または上下に移動します。 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 つの重要な点を留意してください。
runat="server" 属性が設定されていないクライアントサイドの HTML フォームを使用している場合は、フォームの method 属性を POST に設定します。 フォームの 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>
メモ
コレクションは、次の順序で列挙されます。
QueryString Form Cookies 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 要求で役立ちます。