Build 2013 のキーノートでは Windows 8.1 と Visual Studio 2013 の話題が中心でしたが、今回は Visual Studio 2013 で追加された ASP.NET のアップデートに関してまとめておきます。
既に ASP.NET の公式サイトでは記事が公開されています。
ASP.NET vNext | The ASP.NET Site
とりあえずリリースノートだけは最低限確認しておきましょうか。
ASP.NET and Web Tools for Visual Studio 2013 Release Notes | The ASP.NET Site
Visual Studio 2013 と One ASP.NET の話 - しばやん雑記 でも書いたように、TechEd NA 2013 で公開された内容と大差はないですが、実際に検証できる環境が提供されたのが非常に良いですね。特に今回の Visual Studio 2013 は ASP.NET としての方向を再定義したリリースと言っても過言ではないですし。
検証環境について
Visual Studio 2013 は .NET Framework 4.5.1 というインプレース・アップグレードが行われてしまうフレームワーク込みなので、メインマシンではなく Windows Azure 上に用意された検証用のイメージを使って IaaS 上で環境を構築しました。
実際に作成した環境は、日本語化パックをインストールして OS と VS 両方とも日本語にしてあります。
Visual Studio 2013 の日本語化パックはダウンロードセンターで検索すると出てきます。
なので、特徴的な ASP.NET プロジェクト作成ダイアログもしっかりと日本語になっています。いやー、このダイアログはテンションが上がりますね。
それでは各フレームワークに関してプレビュー時点の内容を見ていきます。
ASP.NET MVC 5
ASP.NET MVC 5 からは TechEd NA での予告通り .NET 4.5 が必須となっています。フレームワーク的には .NET 4.5.1 も選べるのですが、おそらく大差はないでしょう。
機能の追加としてはフィルタのオーバーライドと新しい認証パイプラインがメインです。特に認証周りはリライトされて、アクションやコントローラごとに異なる認証方式を選べますし、チャレンジ・レスポンス認証にも対応できるような仕組みになっていました。
追加された属性とインターフェースは以下のような感じです。
- OverrideActionFiltersAttribute
- OverrideAuthenticationAttribute
- OverrideAuthorizationAttribute
- OverrideExceptionFiltersAttribute
- OverrideResultFiltersAttribute
- IAuthenticationFilter
- IOverrideFilter
ロードマップに記載されていた属性ベースのルーティングは今後実装されるようですね。また別の記事として ASP.NET MVC 5 プレビューでの新機能を検証してみたいと思います。
ASP.NET Web API 2
MVC 5 とは対称的に機能追加が相変わらず多いのが Web API 2 ですね。そして、MVC 5 では実装されていなかった属性ベースのルーティングにも対応しています。
public class ProductController : ApiController { [HttpGet("product/{id}")] public Product Get(int id); [HttpGet("product")] public IEnumerable<Product> Get(); }
ルーティング定義を属性を使って書けるようになったのは、意図していないルーティングが行われないようになるので便利ですね。
他にも OData で使えるクエリが増えていたり、POST を使った API のバッチ処理が追加されていますが多すぎるので、これはみそ先生の記事を待ちたいと思います。
ASP.NET SignalR 2.0
そして SignalR ですが、こちらは単独のリリースノートが公開されているので読んでおけば良さそうです。
https://github.com/SignalR/SignalR/blob/master/ReleaseNotes.md
やはりバグ修正がメインとなっていますが、サーバが複数の SignalR プロトコルに対応したことで互換性が向上したり、OWIN との密接な統合がメインでしょうね。
SignalR 2.0 からは、今まで Global.asax.cs に書いていた MapHubs メソッドの呼び出しを、以下のように OWIN のお作法を使って書く必要があります。
public class Startup { public void Configuration(IAppBuilder app) { app.MapHubs(); } }
OWIN を使ったことがある人ならお馴染みの Startup クラスです。これによって SignalR のコアコンポーネントは ASP.NET のルーティングに依存しないようになり、セルフホストとのコード共有が容易になりました。
ASP.NET Identity
これまではフォーム認証*1と Windows 認証ぐらいでしたが、Office 365 や Windows Azure Active Directory などを使ったクレームベースの認証にも対応したようです。まあフェデレーション認証ですよね。
認証周りは最近ごちゃごちゃしていた印象がありますが、新しいダイアログですっきりと整理されました。
自分の環境では 3 つからしか選べなかったんですが、ASP.NET 公式サイトのドキュメントを見ると「Organizational Accounts」というのが選べるようです。
Creating ASP.NET Web Projects in Visual Studio 2013 | The ASP.NET Site
フェデレーション認証の設定は専門用語多くて分かりにくかったのと、WAAD 使った認証も設定がめんどくさい印象があったんですが、ウィザードで設定が出来るのは便利すぎですね。
ASP.NET Scaffolding
今までは ASP.NET MVC と Web API で使われていたスキャフォールディングが統合されて Web Forms でも使えるようになり、インターフェースも一気に変わりました。
ASP.NET MVC の場合は Controller フォルダのコンテキストメニューに項目が表示されます。
内容的には ASP.NET Web Forms 向けに公開されていたスキャフォールディングと似ています。さらにスキャフォールディングのテンプレートは NuGet と同様の仕組みで公開とインストールが可能になりそうです。
それぞれについて面白そうな機能があれば、また別に記事を書いてメモっておきたいと思います。
*1:OAuth 含む