しばやん雑記

Azure とメイドさんが大好きなフリーランスのプログラマーのブログ

Build でリリースされた ASP.NET のアップデート

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 上で環境を構築しました。

f:id:shiba-yan:20130627143854p:plain

実際に作成した環境は、日本語化パックをインストールして OS と VS 両方とも日本語にしてあります。

Visual Studio 2013 の日本語化パックはダウンロードセンターで検索すると出てきます。

f:id:shiba-yan:20130627143945p:plain

なので、特徴的な 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 などを使ったクレームベースの認証にも対応したようです。まあフェデレーション認証ですよね。

認証周りは最近ごちゃごちゃしていた印象がありますが、新しいダイアログですっきりと整理されました。

f:id:shiba-yan:20130627170329p:plain

自分の環境では 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 でも使えるようになり、インターフェースも一気に変わりました。

f:id:shiba-yan:20130627164634p:plain

ASP.NET MVC の場合は Controller フォルダのコンテキストメニューに項目が表示されます。

f:id:shiba-yan:20130627164839p:plain

内容的には ASP.NET Web Forms 向けに公開されていたスキャフォールディングと似ています。さらにスキャフォールディングのテンプレートは NuGet と同様の仕組みで公開とインストールが可能になりそうです。

それぞれについて面白そうな機能があれば、また別に記事を書いてメモっておきたいと思います。

*1:OAuth 含む