Domanda

Dove posso trovare alcuni suggerimenti utili sulle procedure consigliate per l'esecuzione di ASP.NET MVC su IIS6?

Non ho ancora visto alcuna opzione realistica per gli host web che forniscono hosting IIS7.Principalmente perché non vivo negli Stati Uniti.

Quindi mi chiedevo come creare al meglio applicazioni in ASP.NET MVC e renderle facilmente disponibili per la distribuzione sia su IIS6 che su IIS7.Tieni presente che questo è per host web standard, quindi non è possibile accedere ai filtri ISAPI o alle impostazioni speciali all'interno di IIS6.

C'è qualcos'altro a cui si dovrebbe pensare quando si sviluppano applicazioni ASP.NET MVC per indirizzare IIS6?Qualche funzione che non funziona?

AGGIORNAMENTO:Uno dei problemi più grandi è la questione dei percorsi.Il modello {controller}/{action} funzionerà su IIS7, ma non su IIS6 che necessita di {controller}.mvc/{action}.Allora come posso renderlo trasparente?Ancora, niente ISAPI E nessuna impostazione IIS, Per favore.

È stato utile?

Soluzione

Ci ho messo un po', ma sono riuscito a capire come far funzionare le estensioni con IIS 6.Innanzitutto è necessario rielaborare il routing di base per includere i file .aspx in modo che vengano instradati tramite il filtro ISAPI ASP.NET.

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

Se navighi su Home.aspx, ad esempio, il tuo sito dovrebbe funzionare correttamente.Ma Default.aspx e l'indirizzo della pagina predefinita di http://[sito web]/ smettere di funzionare correttamente.Allora come si risolve il problema?

Bene, devi definire un secondo percorso.Sfortunatamente, l'utilizzo di Default.aspx come percorso non funziona correttamente:

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

Allora come fai a farlo funzionare?Bene, qui è dove ti serve il codice di routing originale:

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

Quando si esegue questa operazione, Default.aspx e http://[sito web]/ entrambi riprendono a funzionare, penso perché sono stati mappati con successo sul controller Home.Quindi la soluzione completa è:

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

E il tuo sito dovrebbe iniziare a funzionare perfettamente con IIS 6.(Almeno lo fa sul mio PC.)

E come bonus, se utilizzi Html.ActionLink() nelle tue pagine, non dovresti dover modificare nessun'altra riga di codice nell'intero sito.Questo metodo consente di contrassegnare correttamente l'estensione .aspx del controller.

Altri suggerimenti

Poiché non è possibile modificare le impostazioni IIS per mappare .mvc su ASP.Net, puoi utilizzare un'estensione diversa già mappata su ASP.Net.Ad esempio, potresti utilizzare {controller}.ashx/{action} e dovrebbe funzionare immediatamente su IIS 6.

Non devi convivere con quell'estensione se puoi installare un filtro ISAPI sul server.

Fondamentalmente indirizzi gli URL corrispondenti alla varietà {controller}.mvc, quindi in ASP.NET riscrivi questo URL per rimuovere .mvc: in questo modo non devi definire alcun percorso aggiuntivo o esporre .mvc ai tuoi utenti.

Ne ho scritto qui:http://www.flux88.com/UsingASPNETMVCOnIIS6WithoutTheMVCExtension.aspx

e anche Steve Sanderson ha un buon post qui: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/

Come accennato in questo post sul blog di Phil Hack, è possibile impostare URL senza estensione per ASP.NET MVC in IIS 6 utilizzando mappature delle applicazioni con caratteri jolly:

  1. In IIS 6 passare alle Proprietà di configurazione dell'applicazione per l'applicazione Web ASP.NET MVC.
  2. Fare clic su "Inserisci..." nella sezione Mappe dell'applicazione con caratteri jolly.
  3. Imposta l'eseguibile sul percorso di aspnet_isapi.dll (sulla mia macchina è c:\windows\microsoft.net\framework\v2.0.50727\aspnet_isapi.dll).
  4. Assicurati di NON selezionare "Verifica che il file esista" e fai clic su "OK".

Tuttavia, come menzionato anche da Hack, ci sono alcune implicazioni sulle prestazioni nel fare ciò.

Con IIS6 puoi fare una delle due cose:

  1. Configura un filtro ISAPI per mappare gli URL MVC su ASP.NET
  2. Includi un'estensione nell'URL.Per esempio:htp://localhost/Home.mvc

Poiché l'opzione 1 non è disponibile sulla maggior parte degli host web, devi scegliere la numero 2.

La riscrittura dell'URL può aiutarti a risolvere il problema.Ho implementato una soluzione che consente di distribuire l'applicazione MVC in qualsiasi versione di IIS anche quando viene utilizzato l'hosting virtuale.http://www.codeproject.com/KB/aspnet/iis-aspnet-url-rewriting.aspx

Ho un'applicazione di esempio su IIS6.

Ho trovato una soluzione rapida e sporca.(Sporco, perché contiene il nome della vista predefinita con estensione) Non richiede percorso aggiuntivo o qualcosa di speciale.(Tranne che il percorso predefinito deve {controller}.aspx/{action}...formato)

Qui il file 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>

L'azione predefinita delle mie applicazioni di esempio era indice, nella directory Home.

Nota :Ho visto questo codice sul blog di Phil Haack.Grazie a Brian Lowe.

Ho una guida passo passo dettagliata, ma richiede l'utilizzo di isapi_rewrite.Visualizzalo su: http://biasecurities.com/blog/2008/how-to-enable-pretty-urls-with-asp-net-mvc-and-iis6/

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top