Frage

Wo finde ich einige gute Hinweise zu Best Practices für die Ausführung von ASP.NET MVC auf IIS6?

Ich habe noch keine realistischen Optionen für Webhoster gesehen, die IIS7-Hosting anbieten.Vor allem, weil ich nicht in den USA lebe.

Deshalb habe ich mich gefragt, wie Sie am besten Anwendungen in ASP.NET MVC erstellen und sie einfach für die Bereitstellung auf IIS6 und IIS7 verfügbar machen.Beachten Sie, dass dies für Standard-Webhosts gilt und daher kein Zugriff auf ISAPI-Filter oder spezielle Einstellungen in IIS6 besteht.

Gibt es noch etwas, worüber man bei der Entwicklung von ASP.NET MVC-Anwendungen für IIS6 nachdenken sollte?Gibt es Funktionen, die nicht funktionieren?

AKTUALISIEREN:Eines der größeren Probleme ist die Sache mit den Routen.Das Muster {controller}/{action} funktioniert auf IIS7, aber nicht auf IIS6, das {controller}.mvc/{action} benötigt.Wie mache ich das transparent?Wieder, kein ISAPI Und keine IIS-Einstellungen, Bitte.

War es hilfreich?

Lösung

Es hat etwas gedauert, aber ich habe herausgefunden, wie ich die Erweiterungen mit IIS 6 zum Laufen bringen kann.Zunächst müssen Sie das Basisrouting so überarbeiten, dass es .aspx enthält, damit sie durch den ASP.NET ISAPI-Filter weitergeleitet werden.

routes.MapRoute(
    "Default",                                              // Route name
    "{controller}.aspx/{action}/{id}",                      // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Wenn Sie beispielsweise zu Home.aspx navigieren, sollte Ihre Website einwandfrei funktionieren.Aber Default.aspx und die Standardseitenadresse von http://[Website]/ nicht mehr richtig funktionieren.Wie wird das behoben?

Nun, Sie müssen eine zweite Route definieren.Leider funktioniert die Verwendung von Default.aspx als Route nicht richtig:

routes.MapRoute(
    "Default2",                                             // Route name
    "Default.aspx",                                         // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Wie bringen Sie das also zum Laufen?Nun, hier benötigen Sie den Original-Routing-Code:

routes.MapRoute(
    "Default2",                                             // Route name
    "{controller}/{action}/{id}",                           // URL with parameters
    new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
);

Wenn Sie dies tun, werden Default.aspx und http://[Website]/ Ich denke, beide funktionieren wieder, weil sie erfolgreich wieder dem Home-Controller zugeordnet wurden.Die vollständige Lösung lautet also:

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);
    }
}

Und Ihre Website sollte unter IIS 6 einwandfrei funktionieren.(Zumindest auf meinem PC.)

Und als Bonus sollten Sie, wenn Sie Html.ActionLink() auf Ihren Seiten verwenden, keine andere Codezeile auf der gesamten Website ändern müssen.Diese Methode sorgt dafür, dass die .aspx-Erweiterung des Controllers ordnungsgemäß markiert wird.

Andere Tipps

Da Sie die IIS-Einstellungen nicht ändern können, um .mvc ASP.Net zuzuordnen, können Sie eine andere Erweiterung verwenden, die bereits ASP.Net zugeordnet ist.Sie könnten beispielsweise {controller}.ashx/{action} verwenden und es sollte sofort unter IIS 6 funktionieren.

Mit dieser Erweiterung müssen Sie nicht leben, wenn Sie einen ISAPI-Filter auf dem Server installieren können.

Grundsätzlich leiten Sie übereinstimmende URLs an die Variante {controller}.mvc weiter und schreiben dann in ASP.NET diese URL um, um .mvc zu entfernen. Dadurch müssen Sie keine zusätzlichen Routen definieren oder .mvc Ihren Benutzern zugänglich machen.

Darüber habe ich hier geschrieben:http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

und Steve Sanderson hat hier auch einen guten Beitrag: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

Wie hier erwähnt Blogeintrag von Phil Hack ist es möglich, erweiterungslose URLs für ASP.NET MVC in IIS 6 einzurichten Wildcard-Anwendungszuordnungen:

  1. Gehen Sie in IIS 6 zu den Anwendungskonfigurationseigenschaften für Ihre ASP.NET MVC-Webanwendung.
  2. Klicken Sie im Abschnitt „Wildcard-Anwendungskarten“ auf „Einfügen“.
  3. Legen Sie die ausführbare Datei auf den Pfad der aspnet_isapi.dll fest (auf meinem Computer ist dies c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll).
  4. Stellen Sie sicher, dass Sie NICHT die Option „Überprüfen, ob die Datei vorhanden ist“ aktivieren und klicken Sie auf „OK“.

Wie jedoch auch von Hack erwähnt wurde, hat dies einige Auswirkungen auf die Leistung.

Mit IIS6 können Sie eines von zwei Dingen tun:

  1. Richten Sie einen ISAPI-Filter ein, um MVC-URLs ASP.NET zuzuordnen
  2. Fügen Sie eine Erweiterung in die URL ein.Zum Beispiel:htp://localhost/Home.mvc

Da Option 1 bei den meisten Webhostern nicht verfügbar ist, müssen Sie sich für Nummer 2 entscheiden.

Das Umschreiben der URL kann Ihnen bei der Lösung des Problems helfen.Ich habe eine Lösung implementiert, die es ermöglicht, MVC-Anwendungen in jeder IIS-Version bereitzustellen, selbst wenn virtuelles Hosting verwendet wird.http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx

Ich habe eine Beispielanwendung auf IIS6.

Ich habe eine schnelle Lösung gefunden.(Dirty, da es den Standardansichtsnamen mit Erweiterung enthält) Es ist keine zusätzliche Route oder etwas Besonderes erforderlich.(Außer Ihre Standardroute muss {controller}.aspx/{action}...Format)

Hier die 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>

Die Standardaktion meiner Beispielanwendung war „Index“ im Home-Verzeichnis.

Notiz :Ich habe diesen Code auf Phil Haacks Blog gesehen.Danke an Brian Lowe.

Ich habe eine detaillierte Schritt-für-Schritt-Anleitung, aber dafür ist die Verwendung von isapi_rewrite erforderlich.Sehen Sie es sich an unter: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top