25

IIS6 で ASP.NET MVC を実行するためのベスト プラクティスに関する適切な指針はどこにありますか?

IIS7 ホスティングを提供する Web ホストの現実的なオプションはまだ見たことがありません。ほとんどの場合、私は米国に住んでいないため

そこで、ASP.NET MVC でアプリケーションを構築し、IIS6 と IIS7 の両方に簡単に展開できるようにする方法を考えていました。これは標準の Web ホスト用であるため、IIS6 内の ISAPI フィルターや特別な設定にはアクセスできないことに注意してください。

IIS6 をターゲットとする ASP.NET MVC アプリケーションを開発する際に、他に考慮すべきことはありますか? 動作しない機能はありますか?

更新: より大きな問題の 1 つは、ルートの問題です。パターン {controller}/{action} は IIS7 では機能しますが、{controller}.mvc/{action} を必要とする IIS6 では機能しません。では、これを透明にするにはどうすればよいでしょうか。繰り返しますが、ISAPIも IIS-settings も使用しないでください。

4

8 に答える 8

14

少し時間がかかりましたが、拡張機能を 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://[website]/の既定のページ アドレスは正しく機能しなくなります。それで、それはどのように修正されますか?

さて、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://[website]/の両方が再び機能し始めます。これは、Home コントローラーに正常にマップされるためだと思います。したがって、完全な解決策は次のとおりです。

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 拡張子の適切なタグ付けを処理します。

于 2008-11-25T00:43:54.613 に答える
7

IIS 設定を変更して .mvc を ASP.Net にマップすることはできないため、既に ASP.Net にマップされている別の拡張子を使用できます。たとえば、{controller}.ashx/{action} を使用すると、IIS 6 でそのまま使用できます。

于 2008-08-30T12:31:04.447 に答える
4

サーバーに 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/

于 2008-08-29T16:58:31.210 に答える
2

IIS6 では、次の 2 つのいずれかを行うことができます。

  1. ISAPI フィルターをセットアップして、MVC URL を ASP.NET にマップする
  2. URL に拡張子を含めます。例: htp://localhost/Home.mvc

オプション 1 はほとんどの Web ホストでは利用できないため、番号 2 を選択する必要があります。

于 2008-08-29T08:56:11.943 に答える
1

URLの書き換えは、問題の解決に役立ちます。仮想ホスティングが使用されている場合でも、任意のIISバージョンでMVCアプリケーションを展開できるソリューションを実装しました。 http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx

于 2009-11-24T06:23:48.807 に答える
0

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 のブログで見ました。ブライアン・ロウに感謝します。

于 2010-04-21T23:50:07.380 に答える
-2

詳細なステップバイステップ ガイドがありますが、isapi_rewrite を使用する必要があります。参照してください: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/

于 2008-09-02T20:21:40.173 に答える