IISで独自のエラー内容をレスポンスする

WEBサーバーをつかったWEBアプリケーションといえば、リクエストに応じてブラウザで表示する為のWEBページをレスポンスするというのが一般的だと思います。

 

ただ、時にはJSON形式などのデータをレスポンスするといった場合もあります。

 

そんなケースでは、エラーが起きた時HTTPステータスコードで200以外を返しつつ、エラーの詳細をJSON形式などでレスポンスしようと考えたりするはずです。

 

 

WEBサーバーにInternet Information Services (IIS) を使用する場合、開発環境では狙い通り動いたのにサーバーで動かしてみるとエラーのレスポンスが思い通りにならず、「サーバーエラー」というようなHTMLページがレスポンスされてくるいという事が起きます。


こんな事が起きている

IISは、WEBアプリケーションがHTTPステータスコードをエラーコードでレスポンスした場合、デフォルトのエラーページに置き換えてレスポンスするという仕様になっています。

 

この為、独自のエラー情報をWEBアプリケーションから出力したとしても、リクエスト側へその内容は届かないわけです。


web.configで設定を変える

独自の内容をレスポンスさせたい場合は、IISの設定でエラーページに置き換えないようにします。

 

設定は web.config で行います。

<httpErrors>要素を指定してあげる事でエラー時の挙動を制御する事が出来ます。

<configuration>
  <system.webServer>
    <httpErrors errorMode="Custom" existingResponse="PassThrough"/>
  </system.webServer>
</configuration>

errorMode属性に"Custom"を指定し、

existingResponse属性に"PassThrough"を指定する事でWEBアプリケーションが出力する内容をそのままレスポンスするようになります。

 

詳細は https://technet.microsoft.com/ja-jp/library/ee431601.aspx を参照