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を愛用
掲載日: 2013-08-29
iPentec all rights reserverd.