「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
RESTful な HTTP サービスを構築するためのフレームワーク。
/// <summary>MultiPurposeAuthSite.App_Start</summary> namespace MultiPurposeAuthSite.App_Start { /// <summary>WebApi定義(テンプレート)</summary> public static class WebApiConfig { /// <summary>Register</summary> /// <param name="config">HttpConfiguration</param> public static void Register(HttpConfiguration config) { // Web API configuration and services // 「Bearer Token」認証のみを使用するように、Web API を設定。 config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType)); // JSON データにはCamelCaseを使用 (JSON.NET) config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); // CORS (Cross-Origin Resource Sharing)の有効化 // 別ドメイン上で動作する Web アプリからアクセス可能に設定。 config.EnableCors(); // Web API routes を設定する。 // Attribute Routing config.MapHttpAttributeRoutes(); // MapHttpRoute config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional } ); } } }
既定では、以下のようにRoutingが定義されている。
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
したがって、Web API のAction Methodを呼び出す際の URL は以下のようになる。
http://server/application/Controller/id
ASP.NET MVC と違い、Web API のRoute定義には、
(既定では)Action Method名の指定が無い。
Web API を使用した場合、リクエストの HTTP メソッドに応じて、
以下のようにControllerのAction Methodが自動的に呼び出される。
項番 | HTTP メソッド | 呼び出されるメソッド |
1 | GET | "Get" で始まる名前のメソッド |
2 | POST | "Post" で始まる名前のメソッド |
3 | PUT | "Put" で始まる名前のメソッド |
4 | DELETE | "Delete" で始まる名前のメソッド |
以下の様に{action}の定義を行えば、
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }
デフォルトのHTTP Methodに対応したActionMethod?ではなく、
独自のActionMethod?名を明示することができる。
・・・
Web API の認証は、OAuth 2.0のBearer Tokenを使用するのが一般的になりつつある。
// Web API configuration and services // 「Bearer Token」認証のみを使用するように、Web API を設定。 config.SuppressDefaultHostAuthentication(); config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
以下の指定で、CORS (Cross-Origin Resource Sharing)を有効化する。
// CORS (Cross-Origin Resource Sharing)の有効化 // 別ドメイン上で動作する Web アプリからアクセス可能に設定。 config.EnableCors();
Web API を利用した場合のコントローラの例を以下に示す。
同じコントローラの中で GET に対応したメソッドを複数定義したい場合などは、
以下のようにオーバーロードで対応できる。
public class ValuesController : ApiController { // GET api/values public IEnumerable<string> Get() { return new string[] { "value1", "value2" }; } // GET api/values/5 public string Get(int id) { return "value"; } // POST api/values public void Post([FromBody]string value) { } // PUT api/values/5 public void Put(int id, [FromBody]string value) { } // DELETE api/values/5 public void Delete(int id) { } }
CORS (Cross-Origin Resource Sharing)に対応する場合、
前述の、WebApiConfigでのCROSの有効化を行った後に、
以下のようにApiController?にEnableCors?属性を指定する。
/// <summary>OAuthResourceServerのApiController(ライブラリ)</summary> [Authorize] [EnableCors( // リソースへのアクセスを許可されている発生元 origins: "*", // リソースによってサポートされているヘッダー headers: "*", // リソースによってサポートされているメソッド methods: "*", // SupportsCredentials = true)] public class OAuthResourceApiController : ApiController {
以下が参考になるが、
最近のOAuth 2.0 や OpenID Connect等では、"Implicit Grant"と呼ばれるWebAPI専用フローがあり、認証Cookieは使用しないで、
Bearer TokenというものをHTTPヘッダに付与して認証・認可するのが一般的になってきている。CROSの認証などもコレによって行う。
「HttpClientの類の使い方」を参考にできる。
ASP.NET Web API2からOWIN対応され、セルフホストが可能になっている。
Tags: :.NET開発, :通信技術, :OWIN, :ASP.NET, :ASP.NET Web API