Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
da Microsoft
In questa esercitazione si apprenderà come usare ASP.NET MVC e routing degli URL, con versioni diverse di Internet Information Services. Si apprenderà diverse strategie per l'uso di ASP.NET MVC con IIS 7.0 (modalità classica), IIS 6.0 e versioni precedenti di IIS.
Il framework ASP.NET MVC dipende dal routing ASP.NET per instradare le richieste del browser alle azioni del controller. Per sfruttare ASP.NET routing, potrebbe essere necessario eseguire passaggi di configurazione aggiuntivi nel server Web. Tutto dipende dalla versione di Internet Information Services (IIS) e dalla modalità di elaborazione delle richieste per l'applicazione.
Ecco un riepilogo delle diverse versioni di IIS:
- IIS 7.0 (modalità integrata): nessuna configurazione speciale necessaria per usare ASP.NET Routing.
- IIS 7.0 (modalità classica): è necessario eseguire una configurazione speciale per usare ASP.NET Routing.
- IIS 6.0 o versione successiva: è necessario eseguire una configurazione speciale per usare ASP.NET Routing.
La versione più recente di IIS è la versione 7.5 (in Win7). IIS 7 di IIS è incluso in Windows Server 2008 E VISTA/SP1 e versioni successive. È anche possibile installare IIS 7.0 in qualsiasi versione del sistema operativo Vista, ad eccezione di Home Basic (vedere https://technet.microsoft.com/library/cc731179%28WS.10%29.aspx).
IIS 7.0 supporta due modalità per l'elaborazione delle richieste. È possibile usare la modalità integrata o la modalità classica. Non è necessario eseguire passaggi di configurazione speciali quando si usa IIS 7.0 in modalità integrata. Tuttavia, è necessario eseguire una configurazione aggiuntiva quando si usa IIS 7.0 in modalità classica.
Microsoft Windows Server 2003 include IIS 6.0. Non è possibile aggiornare IIS 6.0 a IIS 7.0 quando si usa il sistema operativo Windows Server 2003. È necessario eseguire passaggi di configurazione aggiuntivi quando si usa IIS 6.0.
Microsoft Windows XP Professional include IIS 5.1. È necessario eseguire passaggi di configurazione aggiuntivi quando si usa IIS 5.1.
Infine, Microsoft Windows 2000 e Microsoft Windows 2000 Professional include IIS 5.0. È necessario eseguire passaggi di configurazione aggiuntivi quando si usa IIS 5.0.
Modalità integrata rispetto alla modalità classica
IIS 7.0 può elaborare le richieste usando due diverse modalità di elaborazione delle richieste: integrata e classica. La modalità integrata offre prestazioni migliori e altre funzionalità. La modalità classica è inclusa per la compatibilità con le versioni precedenti di IIS.
La modalità di elaborazione della richiesta è determinata dal pool di applicazioni. È possibile determinare quale modalità di elaborazione viene usata da un'applicazione Web specifica determinando il pool di applicazioni associato all'applicazione. Seguire questa procedura:
- Avviare Internet Information Services Manager
- Nella finestra Connessioni selezionare un'applicazione
- Nella finestra Azioni fare clic sul collegamento Impostazioni di base per aprire la finestra di dialogo Modifica applicazione (vedere Figura 1)
- Prendere nota del pool di applicazioni selezionato.
Per impostazione predefinita, IIS è configurato per supportare due pool di applicazioni: DefaultAppPool e Classic .NET AppPool. Se DefaultAppPool è selezionato, l'applicazione viene eseguita in modalità di elaborazione integrata delle richieste. Se è selezionato .NET AppPool classico, l'applicazione è in esecuzione in modalità di elaborazione classica delle richieste.
Figura 1: Rilevamento della modalità di elaborazione della richiesta(Fare clic per visualizzare l'immagine full-size)
Si noti che è possibile modificare la modalità di elaborazione della richiesta nella finestra di dialogo Modifica applicazione. Fare clic sul pulsante Seleziona e modificare il pool di applicazioni associato all'applicazione. Si noti che si verificano problemi di compatibilità durante la modifica di un'applicazione ASP.NET dalla modalità classica a quella integrata. Per altre informazioni, vedere gli articoli seguenti:
- Aggiornamento ASP.NET 1.1 a IIS 7.0 in Windows Vista e Windows Server 2008 -- https://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/upgrading-aspnet-11-to-iis-on-windows-vista-and-windows-server-2008
- ASP.NET integrazione con IIS 7.0 - https://www.iis.net/learn/application-frameworks/building-and-running-aspnet-applications/aspnet-integration-with-iis
Se un'applicazione ASP.NET usa DefaultAppPool, non è necessario eseguire altri passaggi per ottenere ASP.NET Routing (e quindi ASP.NET MVC) per funzionare. Tuttavia, se l'applicazione ASP.NET è configurata per l'uso di .NET AppPool classico, continuare a leggere, è necessario eseguire altre operazioni.
Uso di ASP.NET MVC con versioni precedenti di IIS
Se è necessario usare ASP.NET MVC con una versione precedente di IIS rispetto a IIS 7.0 oppure è necessario usare IIS 7.0 in modalità classica, sono disponibili due opzioni. Prima di tutto, è possibile modificare la tabella di route per usare le estensioni di file. Ad esempio, anziché richiedere un URL come /Store/Details, è necessario richiedere un URL come /Store.aspx/Details.
La seconda opzione consiste nel creare un elemento denominato mappa script con caratteri jolly. Una mappa di script con caratteri jolly consente di eseguire il mapping di ogni richiesta nel framework di ASP.NET.
Se non si ha accesso al server Web, ad esempio l'applicazione MVC ASP.NET è ospitata da un provider di servizi Internet, sarà necessario usare la prima opzione. Se non si vuole modificare l'aspetto degli URL e si ha accesso al server Web, è possibile usare la seconda opzione.
Vengono esaminate in dettaglio ogni opzione nelle sezioni seguenti.
Aggiunta di estensioni alla tabella di route
Il modo più semplice per ottenere ASP.NET Routing da usare con le versioni precedenti di IIS consiste nel modificare la tabella di route nel file Global.asax. Il file Global.asax predefinito e non modificato in Elenco 1 configura una route denominata Route predefinita.
Elenco 1 - Global.asax (non modificato)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class GlobalApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default", // Route name
"{controller}/{action}/{id}", // URL with parameters
new { controller = "Home", action = "Index", id = "" } // Parameter defaults
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
La route predefinita configurata nell'elenco 1 consente di instradare GLI URL simili al seguente:
/Home/Index
/Product/Details/3
/Prodotto
Sfortunatamente, le versioni precedenti di IIS non passeranno queste richieste al framework di ASP.NET. Pertanto, queste richieste non verranno indirizzate a un controller. Ad esempio, se si effettua una richiesta del browser per l'URL /Home/Index, si otterrà la pagina di errore nella figura 2.
Figura 2: Ricezione di un errore non trovato 404(Fare clic per visualizzare l'immagine a dimensioni complete)
Le versioni precedenti di IIS mappano solo alcune richieste al framework di ASP.NET. La richiesta deve essere per un URL con l'estensione del file corretta. Ad esempio, una richiesta per /SomePage.aspx viene mappata al framework di ASP.NET. Tuttavia, una richiesta per /SomePage.htm non è.
Pertanto, per ottenere il funzionamento ASP.NET Routing, è necessario modificare la route predefinita in modo che includa un'estensione di file mappata al framework di ASP.NET.
Questa operazione viene eseguita usando uno script denominato registermvc.wsf
. È stato incluso nella versione ASP.NET MVC 1 in C:\Program Files\Microsoft ASP.NET\ASP.NET MVC\Scripts
, ma a partire da ASP.NET 2 questo script è stato spostato nel ASP.NET Futures.
L'esecuzione di questo script registra una nuova estensione mvc con IIS. Dopo aver registrato l'estensione .mvc, è possibile modificare le route nel file Global.asax in modo che le route usino l'estensione mvc.
Il file Global.asax modificato in List 2 funziona con le versioni precedenti di IIS.
Elenco 2 - Global.asax (modificato con estensioni)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.mvc/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Importante: ricordarsi di compilare nuovamente l'applicazione MVC ASP.NET dopo aver modificato il file Global.asax.
Sono state apportate due modifiche importanti al file Global.asax nell'elenco 2. In Global.asax sono ora definite due route. Il modello URL per la route predefinita, la prima route, ora è simile al seguente:
{controller}.mvc/{action}/{id}
L'aggiunta dell'estensione con estensione mvc modifica il tipo di file intercettato dal modulo di routing ASP.NET. Con questa modifica, l'applicazione MVC ASP.NET instrada ora le richieste come segue:
/Home.mvc/Index/
/Product.mvc/Details/3
/Product.mvc/
La seconda route, la route radice, è nuova. Questo modello DI URL per la route radice è una stringa vuota. Questa route è necessaria per le richieste corrispondenti effettuate sulla radice dell'applicazione. Ad esempio, la route radice corrisponderà a una richiesta simile alla seguente:
http://www.YourApplication.com/
Dopo aver apportato queste modifiche alla tabella di route, è necessario assicurarsi che tutti i collegamenti nell'applicazione siano compatibili con questi nuovi modelli DI URL. In altre parole, assicurarsi che tutti i collegamenti includano l'estensione .mvc. Se si usa il metodo helper Html.ActionLink() per generare i collegamenti, non è necessario apportare modifiche.
Anziché usare lo script registermvc.wcf, è possibile aggiungere una nuova estensione a IIS mappata al framework ASP.NET per mano. Quando si aggiunge una nuova estensione, assicurarsi che la casella di controllo etichettata Verifica che il file esista non sia selezionato.
Server ospitato
Non è sempre possibile accedere al server Web. Ad esempio, se si ospita l'applicazione MVC ASP.NET usando un provider di hosting Internet, non si avrà necessariamente accesso a IIS.
In questo caso, è necessario usare una delle estensioni di file esistenti mappate al framework di ASP.NET. Esempi di estensioni di file mappate a ASP.NET includono le estensioni con estensione aspx, axd e ashx.
Ad esempio, il file Global.asax modificato in List 3 usa l'estensione aspx anziché l'estensione mvc.
Elenco 3 - Global.asax (modificato con estensioni aspx)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}.aspx/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Il file Global.asax in List 3 è esattamente lo stesso del file Global.asax precedente, ad eccezione del fatto che usa l'estensione aspx anziché l'estensione mvc. Non è necessario eseguire alcuna configurazione nel server Web remoto per usare l'estensione .aspx.
Creazione di una mappa script con caratteri jolly
Se non si desidera modificare gli URL per l'applicazione MVC ASP.NET e si ha accesso al server Web, è disponibile un'opzione aggiuntiva. È possibile creare una mappa di script con caratteri jolly che esegue il mapping di tutte le richieste al server Web nel framework di ASP.NET. In questo modo, è possibile usare la tabella di route MVC predefinita ASP.NET con IIS 7.0 (in modalità classica) o IIS 6.0.
Tenere presente che questa opzione causa l'intercettazione di tutte le richieste effettuate dal server Web. Sono incluse le richieste di immagini, pagine ASP classiche e pagine HTML. Pertanto, l'abilitazione di un mapping di script jolly a ASP.NET ha implicazioni sulle prestazioni.
Ecco come abilitare una mappa script con caratteri jolly per IIS 7.0:
- Selezionare l'applicazione nella finestra Connessioni
- Assicurarsi che sia selezionata la visualizzazione Funzionalità
- Fare doppio clic sul pulsante Mapping del gestore
- Fare clic sul collegamento Aggiungi mappa script jolly (vedere la figura 3)
- Immettere il percorso del file aspnet_isapi.dll (è possibile copiare questo percorso dalla mappa dello script PageHandlerFactory)
- Immettere il nome MVC
- Fare clic sul pulsante OK
Figura 3: Creazione di una mappa script con caratteri jolly con IIS 7.0(Fare clic per visualizzare l'immagine a dimensioni complete)
Seguire questa procedura per creare una mappa script con caratteri jolly con IIS 6.0:
- Fare clic con il pulsante destro del mouse su un sito Web e selezionare Proprietà
- Selezionare la scheda Home Directory
- Fare clic sul pulsante Configurazione
- Selezionare la scheda Mapping
- Fare clic sul pulsante Inserisci (vedere la figura 4)
- Incollare il percorso del aspnet_isapi.dll nel campo Eseguibile (è possibile copiare questo percorso dalla mappa dello script per i file con estensione aspx)
- Deselezionare la casella di controllo etichettata Verifica che esista un file
- Fare clic sul pulsante OK
Figura 4: Creazione di una mappa di script con caratteri jolly con IIS 6.0(Fare clic per visualizzare l'immagine full-size)
Dopo aver abilitato mappe script jolly, è necessario modificare la tabella di route nel file Global.asax in modo che includa una route radice. In caso contrario, verrà visualizzata la pagina di errore nella figura 5 quando si effettua una richiesta per la pagina radice dell'applicazione. È possibile usare il file Global.asax modificato nell'elenco 4.
Figura 5: Errore di route radice mancante(Fare clic per visualizzare l'immagine full-size)
Elenco 4 - Global.asax (modificato con route radice)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace MvcApplication1
{
public class MvcApplication : System.Web.HttpApplication
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { action = "Index", id = "" }
);
routes.MapRoute(
"Root",
"",
new { controller = "Home", action = "Index", id = "" }
);
}
protected void Application_Start()
{
RegisterRoutes(RouteTable.Routes);
}
}
}
Dopo aver abilitato una mappa script con caratteri jolly per IIS 7.0 o IIS 6.0, è possibile effettuare richieste che funzionino con la tabella di route predefinita simile al seguente:
/
/Home/Index
/Product/Details/3
/Prodotto
Riepilogo
L'obiettivo di questa esercitazione è spiegare come usare ASP.NET MVC quando si usa una versione precedente di IIS (o IIS 7.0 in modalità classica). Sono stati illustrati due metodi per ottenere ASP.NET Routing da usare con le versioni precedenti di IIS: modificare la tabella di route predefinita o creare una mappa script con caratteri jolly.
La prima opzione richiede di modificare gli URL usati nell'applicazione MVC ASP.NET. Un vantaggio molto significativo di questa prima opzione è che non è necessario accedere a un server Web per modificare la tabella di route. Ciò significa che è possibile usare questa prima opzione anche quando si ospita l'applicazione MVC ASP.NET con un'azienda di hosting Internet.
La seconda opzione consiste nel creare una mappa script con caratteri jolly. Il vantaggio di questa seconda opzione è che non è necessario modificare gli URL. Lo svantaggio di questa seconda opzione è che può influire sulle prestazioni dell'applicazione MVC ASP.NET.