OWIN.Environmentでエラーが発生する

こんにちは。beaglesoftの真鍋です。

ASP.NET MVCは気に入っているのですが、初期設定では導入しなかったものを途中から追加する場合には手動で設定する必要が有ることが多いため内容を理解する必要が結構あります。

ASP.NET Identityでエラー

ASP.NET MVC5でASP.NET Identityを利用してログイン処理などを実行した時に次のようなエラーが発生しました。

owin.Environment 項目がコンテキストで見つかりませんでした。

owin.Environment.png (40.9 kB)

このプロジェクトでは、もともと認証を利用しないプロジェクトとして作成後に、ASP.NET Identityによる認証を追加しました。そのため、なにか設定が正しくないだろうということは容易に想像がつきました。

原因について

原因はWeb.configに設定されている内容が正しくなかったことでした。具体的には、以下の設定が行われていたためStartup.csファイルが実行されていなかったためです。

<configuration>
  <appSettings>
    ...
    <add key="owin:AutomaticAppStartup" value="false" />
    ...
  </appSettings>
</configuration>

OWINに関する資料を確認すると、owin:AutomaticAppStartupfalseに設定することでOWINの起動を向こうにすることになります。

To disable OWIN startup discovery add the appSetting owin:AutomaticAppStartup with a value of "false" in the web.config file.

また、規約としてOWINは[AssemblyName].Startupを参照することになっているのですが、プロジェクト名が変更されたときに名前空間が一致していないなどトラブルが発生する予感が満載です。この辺も併せて設定を行いました。

<configuration>
  <appSettings>
    ...
    <add key="owin:appStartup" value="Beaglemap.Startup" />
    <add key="owin:AutomaticAppStartup" value="true" />
    ...
  </appSettings>
</configuration>

"owin:appStartupにOWINの起動時に読み込むファイルを指定することができます。今回は名前空間がBeaglemapでクラス名がStartupなのでBeaglemap.Startupを指定しました。

参考にしたサイト

参考にしたサイトはやはりStackoverflowでこちらに記載のある内容から事象について調査を行いました。 [AssemblyName].Startup

また、具体的な設定については OWIN Startup Class Detection | The ASP.NET Site を確認しました。