ASP.Netのデバッグ

VisualStudio2003を使ってASP.Netのコードをデバッグできました。

  1. ASP.Netのソースにブレークポイントを追加しておきます。
  2. 「メニュー」-「ツール」-「デバッグ プロセス」のダイアログを開き、「選択可能なプロセス」から「aspnet_wp.exe」を選択し、「アタッチ」します。ASP.Netのアプリケーションは、通常aspnet_wpプロセス上で動作します。(IISと同じプロセスでどうささせるように変更もできる)

  1. ブラウザを起動し、実行したいaspxファイルをリクエストすると、ブレークポイントの位置でプログラムが中断します。

リクエストの保存

HttpRequestクラスにはSaveAsメソッドが用意されている。
このメソッドを

Request.SaveAs("c:??debug.txt", true);

のように呼び出せば、以下のようにクライアントから送られてきたリクエストを生の状態でファイルに保存できる。

POST /aspnet/Request/hoge03.aspx HTTP/1.1
Cache-Control: no-cache
Connection: Keep-Alive
Content-Length: 153
.
.
__VIEWSTATE=dDwyMDA1MzM2OTYxOzs%2BKFxIkT0e9AQPgtAR8MNLbB0jNGI%3D&t1=%E3%81%82%&_ctl1=Submit

ファイルのアップロード

ichiro2622004-10-20


ASP.NETでファイルのアップロードに成功しました。
PostingAcceptorやWebDAVと比べて、格段に使いやすくなっています。

aspxファイル

<html>
<body>
  <form id="Form1" method="post" runat="server" enctype="multipart/form-data">
    <asp:Label id="Label1" runat="server">ステータス</asp:Label></br>
    添付ファイルの選択:<INPUT type="file" id="File1" name="File1" runat="server"></br>
    保存時のファイル名:<asp:TextBox id="TextBox1" runat="server"></asp:TextBox></br>
    <asp:Button id="Button1" runat="server" Text="ファイルの追加"></asp:Button></br>
  </form>
</body>
</html>

aspx.vbファイル

Private Sub Button1_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles Button1.Click
  Dim LstrTempFolderName As String = "C:?Inetpub?wwwroot?Upload?"
  If TextBox1.Text = "" Then
    Label1.Text = "ファイル名を入力してください"
  Else
    If Not (File1.PostedFile Is Nothing) Then
      Try
        File1.PostedFile.SaveAs((LstrTempFolderName & TextBox1.Text))
        Label1.Text = "アップロード成功!<b>" & LstrTempFolderName _
              & TextBox1.Text & "</b>"
      Catch exc As Exception
        Label1.Text = "アップロード失敗!<b>" & LstrTempFolderName _
              & TextBox1.Text & "</b><br>" & exc.ToString()
      End Try
      TextBox1.Text = ""
    End If
  End If
End Sub

文字コード

ASP.NETでは、通常UTF-8エンコードされたページが出力されるが、入力データについてはUTF-8であるとは限らない。ASP.NETページに渡すクエリ文字列は、UTF-8エンコードされていなければならない。全てのページがASP.NETページなら、文字コードは自動的にUTF-8で統一されるが、HTMLファイルが混ざると気をつける必要がある。
例えば、シフトJISでデザインされたWebページから、シフトJISエンコードされたクエリ文字列が渡されると、ASP.NETページはこれをUTF-8だと誤解して受け取ってしまうため、文字化けが発生する。
web.configを編集することで、ASP.NETのデフォルトエンコードUTF-8からシフトJISに変更するできる。