読者です 読者をやめる 読者になる 読者になる

ふるすたっくえんじにあっぽい人の日記

ASP .NET MVC (C#)、.NET Framework、iOS (Objective-c) アプリ、Androidアプリ (Java)、AWS、たまにLAMPとかプロジェクトマネジメントあたりのお話

【ASP .NET MVC Web API】SSL使いたい!

おひさしぶりでござます。
開発がたのしくてたのしくて長らくさぼっておりましたw

やっぱりC#さんは神ですねー
昔は会社でC# 家でiOSでしたが最近は逆転ー
ってことでASP .NET MVC 4 Web APIでごにょごにょしております。
微妙に某あの子に似てきてますがしょーがないですねー
メソッド名とかクラス名とか設計とか似ちゃうよねそりゃ

とりあえず本題

Web APISSLつかいたいよね。うん。
はい、以下のよーなクラスを用意しましょう。

using System;
using System.Net;
using System.Net.Http;
using System.Web.Http.Controllers;
using System.Web.Http.Filters;

namespace Hoge.Hoge.Hoge
{
    public class RequireHttpsAttribute : AuthorizationFilterAttribute
    {
        public override void OnAuthorization(HttpActionContext context)
        {
            if (context.Request.RequestUri.Scheme == Uri.UriSchemeHttps)
                base.OnAuthorization(context);
            else
                context.Response = new HttpResponseMessage(HttpStatusCode.Forbidden);
        }
    }
}

AuthorizationFilterAttributeがポイントですねー
なお、宣言はこうなっております
クラスにも付加できるんですねー
継承もできますねー
どの言語にも言えることですがちゃんと宣言は見ましょうねー

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public abstract class AuthorizationFilterAttribute : FilterAttribute, IAuthorizationFilter, IFilter

で、SSL使いたいAPIControllerまたはメソッドに付加しますー

public class HogeController : ApiController
{
    [HttpGet]
    [RequireHttps]
    public HttpResponseMessage Get()
    {
    }
}

認証はまた別の機会にー