IIS6 上の ASP.NET MVC
-
09-06-2019 - |
質問
IIS6 で ASP.NET MVC を実行するためのベスト プラクティスに関する優れた指針はどこで見つかりますか?
IIS7 ホスティングを提供する Web ホストの現実的なオプションはまだ見つかっていません。一番の理由は、私はアメリカに住んでいないからです。
そこで私は、ASP.NET MVC でアプリケーションを構築し、IIS6 と IIS7 の両方に簡単に展開できるようにする最善の方法について疑問に思っていました。これは標準の Web ホスト用であるため、ISAPI フィルターや IIS6 内の特別な設定にはアクセスできないことに注意してください。
IIS6 をターゲットとする ASP.NET MVC アプリケーションを開発するときに考慮すべきことは他にありますか?動作しない機能はありますか?
アップデート:より大きな問題の 1 つはルートに関するものです。パターン {controller}/{action} は IIS7 では機能しますが、{controller}.mvc/{action} を必要とする IIS6 では機能しません。では、これを透明にするにはどうすればよいでしょうか?また、 ISAPI がありません そして IIS 設定がありません, 、 お願いします。
解決
少し時間はかかりましたが、拡張機能を IIS 6 で動作させる方法がわかりました。まず、ASP.NET ISAPI フィルターを介してルーティングされるように、ベース ルーティングを修正して .aspx を含める必要があります。
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
たとえば、Home.aspx に移動すると、サイトは正常に動作するはずです。ただし、Default.aspx とデフォルトのページアドレスは http://[ウェブサイト]/ 正しく動作しなくなります。それで、それはどのように修正されるのでしょうか?
さて、2 番目のルートを定義する必要があります。残念ながら、Default.aspx をルートとして使用すると、正しく機能しません。
routes.MapRoute(
"Default2", // Route name
"Default.aspx", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
では、どうやってこれを機能させるのでしょうか?さて、ここで元のルーティング コードが必要になります。
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
これを行うと、Default.aspx と http://[ウェブサイト]/ 両方とも再び動作し始めます。これは、ホーム コントローラーに正常にマッピングされたためだと思います。したがって、完全な解決策は次のようになります。
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}.aspx/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
routes.MapRoute(
"Default2", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
そして、サイトは IIS 6 で問題なく動作し始めるはずです。(少なくとも私のPCではそうなります。)
さらに、ページで Html.ActionLink() を使用している場合は、サイト全体で他のコード行を変更する必要はありません。このメソッドは、コントローラーの .aspx 拡張子に適切にタグ付けします。
他のヒント
IIS 設定を変更して .mvc を ASP.Net にマップすることはできないため、すでに ASP.Net にマップされている別の拡張子を使用できます。たとえば、{controller}.ashx/{action} を使用すると、IIS 6 ではそのまま使用できるはずです。
サーバーに ISAPI フィルターをインストールできる場合は、その拡張機能を使用する必要はありません。
基本的に、一致した URL を {controller}.mvc にルーティングし、ASP.NET でこの URL を書き換えて .mvc を削除します。これにより、追加のルートを定義したり、ユーザーに .mvc を公開したりする必要がなくなります。
これについてはここに書きました:http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx
Steve Sanderson もここに良い投稿をしています: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/
この中で述べたように ブログ投稿 Phil Hack によると、次を使用して IIS 6 で ASP.NET MVC の拡張子なしの URL をセットアップすることが可能です。 ワイルドカード アプリケーション マッピング:
- IIS 6 で、ASP.NET MVC Web アプリケーションのアプリケーション構成プロパティに移動します。
- [ワイルドカード アプリケーション マップ] セクションの [挿入...] をクリックします。
- 実行可能ファイルを aspnet_isapi.dll のパスに設定します (私のマシンでは、これは c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll です)。
- 「ファイルが存在することを確認する」にはチェックを入れずに「OK」をクリックしてください。
ただし、Hack も述べているように、これを行うとパフォーマンスにいくつかの影響があります。
IIS6 では、次の 2 つのうちの 1 つを行うことができます。
- ISAPI フィルターをセットアップして MVC URL を ASP.NET にマップする
- URLに拡張子を含める. 。例えば:http://localhost/Home.mvc
オプション 1 はほとんどの Web ホストでは利用できないため、2 を選択する必要があります。
URL の書き換えは問題の解決に役立ちます。仮想ホスティングが使用されている場合でも、任意の IIS バージョンで MVC アプリケーションをデプロイできるソリューションを実装しました。http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx
IIS6 上にサンプル アプリケーションがあります。
手っ取り早い解決策を見つけました。(拡張子付きのデフォルトのビュー名が含まれているため、汚いです) 追加のルートや特別なものは必要ありません。(ただし、デフォルト ルートは {controller}.aspx/{action}... である必要があります。フォーマット)
ここではdefault.aspx
<%@ Page Language="C#"%>
<script runat="server">
protected void Page_Load(object sender, EventArgs e)
{
HttpContext.Current.RewritePath("~/Home.aspx/index");
IHttpHandler httpHandler = new MvcHttpHandler();
httpHandler.ProcessRequest(HttpContext.Current);
}
</script>
私のサンプル アプリケーションのデフォルトのアクションは、ホーム ディレクトリのインデックスでした。
注記 :Phil Haack のブログでこのコードを見ました。ブライアン・ロウに感謝します。
詳細なステップバイステップガイドがありますが、isapi_rewrite を使用する必要があります。次の場所でご覧ください: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/