「むっきー。あまりに意外な結末で腹が立った」
「何が問題でどう解決できたのか説明してくれよ」
問題 §
- ASP.NET MVCとASP.NET Web APIを含むWebアプリケーションがある
- ASP.NET MVCで認証した。当然ASP.NET MVCのページでは認証情報が取れる
- ASP.NET Web APIのリクエストを投げると認証されていないことになっている
「つまり、Web APIに認証を掛けられないってことだ」
「ふむふむ」
原因と解決 §
「原因はなんだい?」
「プロジェクト作成時に自動生成させたWebApiConfig.csに以下のようなコードが含まれていた」
// Web API configuration and services
// Configure Web API to use only bearer token authentication.
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
「えっ? SuppressDefaultHostAuthenticationってなに? DefaultのHostAuthenticationをSuppressさせちゃうの?」
「そうらしいぞ」
「解決はなに?」
「とりあえずこの2行をコメントアウトしたらバッチリ認証情報が取れるようになった」
感想 §
「君の感想はなんだい?」
「こんな下らない問題で半日以上潰れた。泣きたい。疫病神なのかASP.NET Web API!」
「何を泣いているんだ」
「これは心の汗だい」
「結局どう考える?」
「単に特定のURLを叩いてJSONオブジェクトを送り込んでJSONオブジェクトを送り返してもらうぐらいの話なら、ASP.NET Web APIは無くてもいいな。むしろ無い方がいい。良く分からないブラックボックスを抱え込むと、問題発生時の調査にもの凄く時間と手間を食う」
「ASP.NET MVCもブラックボックスとは言えないのかい?」
「それは基本フレームワークだからまず使わないと話が始まらない」
「ASP.NET Web APIもASP.NET MVCの一部なんだろ?」
「ところが、ASP.NET MVCとは別個の独立したフレームワークらしいぞ」
「じゃあ、ASP.NET MVCだけ使って、ASP.NET Web APIは一切使わないってこともできるの?」
「それは可能らしい」