はじめに
* 以下「サンプル:エラー発生時」を、Visual Studio2012で実装したら、 例外「PlatformNotSupportedException」が発生した
エラー内容
System.PlatformNotSupportedException: This operation requires IIS integrated pipeline mode. # 【日本語訳】この操作は、IIS統合パイプラインモードが必要です
サンプル:エラー発生時
Public Class MvcApplication Inherits System.Web.HttpApplication Protected Sub OnPreSendRequestHeaders(sender As Object, e As EventArgs) Me.Response.Headers.Remove("Server") ' ★ここで例外が起こる★ Me.Response.Headers.Remove("X-AspNet-Version") Me.Response.Headers.Remove("X-AspNetMvc-Version") End Sub ' ・・・略・・・ End Class
発生した環境
* Visual Studio2012 / ASP.NET 開発サーバー(Cassini) * .NET4.5
原因
例外の説明文からもわかるが、 上記「発生した環境」から下記「API仕様」の条件「.NET Framework 3.0」を満たしているので 残りの条件「IIS 7.0 統合パイプラインのモード」でなかったことが原因。 もっと突き詰めると、Webサーバとして、ASP.NET 開発サーバー(Cassini)を使用していたのだが ASP.NET 開発サーバーは、クラッシックモード相当するらしくので、このことが原因。http://surferonwww.info/BlogEngine/post/2011/11/18/ASPNET-development-server-and-IIS.aspx
API仕様
https://msdn.microsoft.com/ja-jp/library/system.web.httpresponse.headers.aspxより抜粋 Headers プロパティはでのみサポート、 IIS 7.0 統合パイプラインのモードと、 少なくとも、.NET Framework 3.0。アクセスしようとする、 Headers プロパティと、これら 2 つの条件のいずれかが満たされなかった場合、 PlatformNotSupportedException がスローされます。
解決方法
解決案1
* 開発環境と本番環境を区別可能なフラグなどを設けて、開発環境では実行しないようにする
解決案2
* 使用するサーバを、ASP.NET 開発サーバーではなく、ローカルIIS/IIS Expressに置き換える * 変更方法は、プロジェクトを右クリックし、[プロパティ]-[Web]を選択し、「IIS Express」を選ぶだけ。 (以下のサイトを参照のこと。)http://www.ilovex.co.jp/blog/system/net/aspnetvisualstudio.html