ASP.NET

**ASP.NET**は、マイクロソフトが開発・提供しているWebアプリケーションフレームワークで、動的なウェブサイトやWebアプリケーションやWebサービスの開発や運用を行う。ASP.NETはActive Server Pagesを.NET向けにしたものである。

ASP.NETのもとには、ウェブサイト・ウェブアプリケーションの作成するために3種類のフレームワークが用意されている。

* ASP.NET Webフォーム
* ASP.NET MVC
* ASP.NET Webページ
このほか、Web API作成に特化したASP.NET Web API、リアルタイム処理のためのASP.NET SignalRといったフレームワークが存在する。

このほか、.NET Core上で動作するASP.NET Coreが新たに開発されている。

## ASP.NET Webフォームの特徴
ASP.NETは、それまでのWebアプリケーション構築の常識であった、HTMLの知識やHTTP通信の仕組み、ブラウザとサーバー間のデータのやりとりなどを抽象化して、GUIモデルによるアプリケーション開発が行えるようになっている。ページデザインは、以前のASPと同じようにHTMLを直接記述することもできるが、Visual Studioなどの開発環境を用いることでGUIによるページデザインが行えるようになっている。また、HTTP POSTの仕組みを利用したPostBackと呼ばれる仕組みを使うことによって、イベント駆動型プログラミングを実現している。

内部の仕組みは抽象化されているが、実際にはHTMLやHTTP、JavaScriptなど従来のモデルを使用しているため、通常のWebアプリケーションと同様にWebブラウザで表示できるというメリットがある。ただしその反面、WebブラウザやHTTPの制約に考慮して開発することが必要なのは従来通りであるため、Webアプリケーションが分からないプログラマでもWebアプリケーションを開発できるようになる魔法の杖では決してない。

また、ブラウザを認識して最適なHTMLを生成するほか、実行時に前回に実行したものと比べ変更があるときにのみコンパイルをしてキャッシュしておくため、ASPと比べ処理速度が向上している。

ASPはSSIから呼び出すことができるが、ASP.NETは呼び出せない。

## ASP.NETの動作
IISではASP.NETはaspnet_isapi.dllというファイルがISAPIを利用して動作している。ASP.NETの動作に関する設定の多くは、*.configファイルを利用している。事前にコンパイルされたファイルまたはDLLやコンパイルされていないファイルを指定したディレクトリに置くだけで動作する。

*ASP.NETで使用するクラスの多くは、以下の名前空間で定義されている。

```
System.Web
System.Web.UI
```


## ASP.NETで利用できる言語
Visual Studioでは、Visual BasicやC#を既定の言語として選択するようになっているが、最終的にはコンパイルされたアセンブリで動作するため、C++/CLIやJScript.NETなど.NETに対応した言語であれば様々な言語で記述することもできる。

## 拡張子
;aspx ファイル
:一般的なウェブフォームページ
;asax ファイル
:アプリケーションレベルのロジックとイベントハンドリングの構築
;ascx ファイル
:オリジナルのユーザコントロールをウェブページで利用する場合に用いる
;ashx ファイル
:独自のHTTPハンドラの構築
;asmx ファイル
:ウェブサービスのページの構築
;axd ファイル
:アプリケーションレベルでのトレーシングのためのファイル
;browser ファイル
:Webサイトが許容するブラウザの構成を保存するファイル
;config ファイル
:Webアプリケーションの設定を記述するXML形式のファイル
;cs/vb ファイル
:コンパイル前のソースファイル。前者はC#言語で、後者はVisual Basic言語で記述される
;master ファイル
:ページに統一的なデザインを設定するマスターページファイル
;sitemap ファイル
:サイトマップの設定ファイル
;skin ファイル
:Webページのテーマスキンの構築
;resx ファイル
:ファイルの国際化（グローバリゼーション）や地域化（ローカリゼーション）する場合のリソースファイル

## ディレクトリ構造
;App_Code
:.csや*.vbなどのソースファイルを配置するディレクトリ
;App_LocalResources
:個々にばらばらになった地域化されたファイルを配置するディレクトリ
;App_GlobalResources
:たくさんのページの地域化するリソース (*.resx) を配置するディレクトリ
;App_Themes
:テーマファイルの配置するディレクトリ
;App_Browsers
:サイトの仕様に沿ったブラウザの定義を配置する *.browser ファイルを配置するディレクトリ
;bin
:ASP.NETで利用するバイナリファイルの配置に用いるディレクトリ

## ASP.NETの文法
ASP.NETでは普通、コード表示ブロック (`<% %>`)をbody要素内で使わない。
(コード表示ブロックを使用して、インラインコードを埋め込むこともできる。)

例1: Hello, Worldの文字列を出力させる（例題の言語はVisual Basic)。


```asp
<%@ Page Language="VB" %>
 <script runat="server">
     Private Sub Page_Load()
         Label1.Text = "Hello, World"
     End Sub
 </script>
 <html>
  <body>
   <form runat="server">
    <asp:Label id="Label1" />
   </form>
  </body>
 </html>
```


例2: コードを別のファイルに記述する。

Default.aspx

```asp
<%@ Page Language="VB" CodeFile="Default.aspx.vb" Inherits="_Default" %>
 <html>
  <body>
   <form runat="server">
    <asp:Label id="Label1" />
   </form>
  </body>
 </html>
```


Default.aspx.vb

```vbnet
Partial Class _Default
     Inherits System.Web.UI.Page
     Private Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
         Label1.Text = "Hello, World"
     End Sub
 End Class
```


## 開発ツール
*Microsoft Expression Web
*Microsoft Visual Studio
*Microsoft Visual Web Developer
*Microsoft SharePoint Designer
*Adobe Dreamweaver MX
*ASP.NET Web Matrix
*MonoDevelop
*SharpDevelop
*Delphi 2006

## 展開プラットフォーム
* Internet Information Services
* XSP (Webサーバ)
* Apache HTTP Server - （mod_mono を利用、暗黙的にXSPがバックグラウンドで動作する）

## フレームワーク
*Castle Monorail
*Spring.NET
*Skaffold.NET

## 関連項目
* .NET Framework
* 
* ASP.NET MVC Framework

## 脚注

## 外部リンク
*
*ASP.NET のドキュメント
*Microsoft Web 開発 ガイドライン ～ ASP.NET プログラミング エッセンシャル ～　
*CodePlex - ASP.NET 
*ASP.NET MVC 2 サンプル ソースコード