Open棟梁Project - マイクロソフト系技術情報 Wiki

目次

概要

RESTful な HTTP サービスを構築するためのフレームワーク。

WebApiConfig?の例

/// <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

MapHttpRoute?

既定では、以下のように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 メソッド呼び出されるメソッド
GET"Get" で始まる名前のメソッド
POST"Post" で始まる名前のメソッド
PUT"Put" で始まる名前のメソッド
DELETE"Delete" で始まる名前のメソッド

以下の様に{action}の定義を行えば、

config.Routes.MapHttpRoute(
    name: "DefaultApi",
    routeTemplate: "api/{controller}/{action}/{id}",
    defaults: new { id = RouteParameter.Optional }

デフォルトのHTTP Methodに対応したActionMethod?ではなく、
独自のActionMethod?名を明示することができる。

MapHttpAttributeRoutes?

・・・

その他の設定

認証

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));

CROS

以下の指定で、CROSを有効化する。

// CORS (Cross-Origin Resource Sharing)の有効化
// 別ドメイン上で動作する Web アプリからアクセス可能に設定。
config.EnableCors();

参考

ApiController?の例

基本

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

CORS (Cross-Origin Resource Sharing)に対応する場合、

EnableCors?属性

前述の、WebApiConfigでのCROSの有効化を行った後に、
以下のようにApiController?EnableCors?属性を指定する。

/// <summary>OAuthResourceServerのApiController(ライブラリ)</summary>
[Authorize]
[EnableCors(
    // リソースへのアクセスを許可されている発生元
    origins: "*",
    // リソースによってサポートされているヘッダー
    headers: "*",
    // リソースによってサポートされているメソッド
    methods: "*",
    // 
    SupportsCredentials = true)]
public class OAuthResourceApiController : ApiController
{

認証CookieをCROSで送信

以下が参考になるが、

最近のOAuth 2.0 や OpenID Connect等では、"Implicit Grant"と呼ばれるWebAPI専用フローがあり、認証Cookieは使用しないで、
Bearer TokenというものをHTTPヘッダに付与して認証・認可するのが一般的になってきている。CROSの認証などもコレによって行う。

参考

JSON

リクエスト送信方法

HttpClientの類の使い方」を参考にできる。

参考

認証

OWIN

セルフホスト

ASP.NET Web API2からOWIN対応され、セルフホストが可能になっている。

参考


Tags: :.NET開発, :通信技術, :OWIN, :ASP.NET, :ASP.NET Web API


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS