「マイクロソフト系技術情報 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