20120425

776 views

Published on

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
776
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
2
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

20120425

  1. 1. SC-014
  2. 2. 小野 修司どっとねっとふぁん http://blogonos.wordpress.com/MSMVP 10年連続受賞 Microsoft MVP for ASP.NET/IIS (April 2007 – March 2013) Microsoft MVP for Visual C# (April 2003 – March 2007)業務はWeb系の開発がメイン遠距離通勤
  3. 3. ASP.NET MVC 4 Beta の一部として提供RESTful な Web サービスを提供 データを表す URI に対して HTTP のメソッドで操作を行うVisual Studio のテンプレートが提供されている Visual Studio 2010/.NET 4 用(go-live ライセンス) Visual Studio 11/.NET 4.5 用ソースコードが Apache 2.0 ライセンスで提供されている
  4. 4. 多様なデバイスにリーチ端末の形態 デスクトップ スレート モバイルアプリケーションの形態 HTMLアプリケーション ネイティブアプリケーション
  5. 5. WCF Data Servicesデータベースをそのまま Web サービスとして公開するのが容易WCF RIA ServicesSilverlight アプリケーションとの連携が容易WCF Web HTTP プログラミング モデルWebServiceHost を利用し、サービスコントラクトを定義/実装して公開
  6. 6. 柔軟なプログラミングモデルルーティング“設定より規約” によるアクションメソッド呼び出しPOCO による Model 定義に対応クエリーパラメーターによるページング/ソーティング/フィルタ対応属性と Model バインディングによる検証カスタムフィルターによる処理の拡張適切なHTTPステータスの返却HttpStateCode の利用
  7. 7. routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );“api/{controller}/{action}/{id}” と action をURLに含める設定も可能この場合 RESTful とはいえなくなる
  8. 8. データの一覧Getで始まる引数なしのメソッド[HttpGet] を付加した引数なしのメソッド特定データの取得Getで始まる引数をとるメソッド[HttpGet] を付加した引数をとるメソッド
  9. 9. データの追加Postで始まるメソッド[HttpPost] を付加したメソッドデータの更新Putで始まるメソッド[HttpPut] を付加したメソッドデータの削除Deleteで始まるメソッド[HttpDelete] を付加したメソッド
  10. 10. POCO による Model 定義 public class Contact { public int ID { get; set; } [Required(ErrorMessage = "名前を入力してください")] public string Name { get; set; } [Required(ErrorMessage = "メールアドレスを入力してください")] public string Mail { get; set; } }
  11. 11. $filterSQL 文の Where 句に相当$orderbySQL 文の Order By 句に相当$skip指定した数のデータを読み飛ばす$top指定した数のデータを取得する
  12. 12. public IQueryable<Contact> Get(){ return db.Contacts.AsQueryable();}IQueryable に対応するだけでよい
  13. 13. 属性による検証 public class Contact { public int ID { get; set; } [Required(ErrorMessage = "名前を入力してください")] public string Name { get; set; } [Required(ErrorMessage = "メールアドレスを入力してください")] public string Mail { get; set; } }Model バインディングにより ModelState に検証結果が格納される
  14. 14. カスタムフィルターによる処理の拡張 public class ValidationActionFilter : ActionFilterAttribute { public override void OnActionExecuting(HttpActionContext context) { var modelState = context.ModelState; if (!modelState.IsValid) { dynamic errors = new JsonObject(); foreach (var key in modelState.Keys) { var state = modelState[key]; if (state.Errors.Any()) { errors[key] = state.Errors.First().ErrorMessage; } } context.Response = new HttpResponseMessage<JsonValue>(errors, HttpStatusCode.BadRequest); } } }
  15. 15. OnActionExecutingAction の処理開始前OnActionExecutedAction の処理終了後OnAuthorization認証チェック時OnException例外発生時
  16. 16. [Authorize] 属性の追加HTTPステータス 302 が返されるLoginページへのリダイレクト※対応の詳細は下記でhttp://blogs.msdn.com/b/tsmatsuz/archive/2012/03/12/asp-net-web-api-validation-authentication-authorization-exception-handling-using-custom-filter.aspx
  17. 17. Getting Started with ASP.NET Web APIhttp://www.asp.net/web-apiSelf Hosting / Dependency Resolver の利用等の情報もASP.NET Web API Referencehttp://msdn.microsoft.com/en-us/library/hh849329(v=vs.108).aspxSource Codehttp://aspnetwebstack.codeplex.com/
  18. 18. WDD 会場内の日経 BP 社ブースと日経 BP 書店にてプログラミングMicrosoft ASP.NET MVC特別価格にて先行発売中! (一般発売は 5/8 予定)プログラミングMicrosoft ASP.NET 4特別価格にて発売中! (特別価格専用, 6/30 まで) http://ec.nikkeibp.co.jp/nsp/aspnetmvc/
  19. 19. SC-014

×