Visual Studio のデバッグ環境でJSONファイルにアクセスできない - Visual Studio
クライアント版のWindowsを用いている場合に、Visual Studio のデバッグ環境でJSONファイルにアクセスできないことがあります。
ファイルにアクセスすると下図のエラーが表示されます。
原因
デバッグで利用している IIS Expressに指定した拡張子のMIMEタイプが登録されていないため、ファイルにアクセスできない状態になっています。
対策1 - web.configファイルにMIME マップを登録する
実行しているWebアプリケーションプロジェクトのweb.configファイルにMIME Typeを登録するとアクセス可能になります。
コード例
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="application/json"/>
</staticContent>
</system.webServer>
</configuration>
解説
<system.webServer>
<staticContent>
<mimeMap fileExtension=".json" mimeType="application/json"/>
</staticContent>
</system.webServer>
の部分がMIME マップをの登録部分です。拡張子".json"に"application/json"のMIME Typeを登録しています。
対策2 - IIS ExpressにMIMEマップを登録する
拡張子".json"に"application/json"のMIME Typeを追加する場合、
IISのインストールディレクトリ(appcmd が配置されているディレクトリ)で以下のコマンドを実行するとMIME マップが登録できます。
appcmd set config /section:staticContent /+[fileExtension='.json',mimeType='application/json']
例
cd "c:\Program Files (x86)\IIS Express"
appcmd set config /section:staticContent /+[fileExtension='.json',mimeType='application/json']
実行結果
コマンドを実行すると下図の結果となります。
注意
fileExtension='.json',mimeType='application/json'
の拡張子とmimeTypeの間に空白を入れると動作しません。
正しい例
appcmd set config /section:staticContent /+[fileExtension='.json',mimeType='application/json']
悪い例
appcmd set config /section:staticContent /+[fileExtension='.json', mimeType='application/json']
一般的な書式
appcmd set config /section:staticContent /+[fileExtension='(設定するファイル拡張子)',mimeType='(設定するMIME Type)']
補足 - MIMEマップを削除する場合
MIMEマップを削除する場合は以下のコマンドになります。
appcmd set config /section:staticContent /-[fileExtension='.json',mimeType='application/json']
著者
iPentecのメインプログラマー
C#, ASP.NET の開発がメイン、少し前まではDelphiを愛用