「マイクロソフト系技術情報 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
OAuth 2.0、OpenID Connectを使用する。
以下が参考になる。
「HttpClientの類の使い方」を参考にできる。
/// <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 } ); } } }
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{id}", defaults: new { id = RouteParameter.Optional } );
項番 | HTTP メソッド | 呼び出されるメソッド |
1 | GET | "Get" で始まる名前のメソッド |
2 | POST | "Post" で始まる名前のメソッド |
3 | PUT | "Put" で始まる名前のメソッド |
4 | DELETE | "Delete" で始まる名前のメソッド |
http://ip or fqdn(:port)/(application名/)Controller名/id
public class ValuesController { // GET ~/api/values/?id=32 public string Get(int id) {
config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional }
http://ip or fqdn(:port)/(application名/)Controller名/ActionMethod名/id
[Route("JsonController/SelectCount")]
var rootUrl = 'http://localhost:8888/JsonController/';
url: rootUrl + 'SelectCount' ---> http://localhost:8888/JsonController/SelectCount
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) { } }
基本的に、モデル・バインディングを使用する。
モデル・バインディングは、以下のように実装できる。
「.\SPA_Sample\Models\WebApiParams?」を使用してModelBinding?している。
モデル・バインディングを使用しない方法。
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の認証などもコレによって行う。
前後処理の実装、ベースクラスが使用できなくなったため、
WebAPI用のFilterAttribute?(System.Web.Http.Filters.ActionFilterAttribute?)を使用する。
なお、System.Web.Httpを使用するには、Microsoft.AspNet?.WebApi?.Coreをインストールする必要がある。
ASP.NET Web API2からOWIN対応され、セルフホストが可能になっている。
Tags: :.NET開発, :通信技術, :OWIN, :.NET Core, :ASP.NET, :ASP.NET Web API