ASP.NET MVC e Aruba
Nel post precedente ho parlato della pubblicazione del nostro nuovo sito, realizzato con il framework ASP.NET MVC, su un piano di hosting condiviso di Aruba.
Innanzitutto c’è da dire che tra le guide di Aruba non risulta nulla relativamente ad ASP.NET MVC. Dopo aver letto però un po’ di articoli, menzionati alla fine del post, che riportavano delle procedure grazie alle quali la pubblicazione andava a buon fine, abbiamo pensato di provare.
Ecco quello che abbiamo fatto per portare a termine l’impresa:
Come prima cosa bisogna fare in modo che gli assembly del framework MVC vengano correttamente caricati anche sul server. Per fare ciò da Visual Studio bisogna aprire la cartella delle Reference nel nostro progetto web e cercare questi 3 assembly:
System.Web.Abstraction
System.Web.Mvc
System.Web.Routing
Dopo averli selezionati dalla finestra delle proprietà modifichiamo la voce “Copy local” a “True”, in modo che durante il build del progetto i 3 assembly vengano copiati nella cartella “bin”.
Il secondo grosso problema è che i server Aruba hanno IIS 6.0 e quando ricevono gli URL generati da MVC non riescono a risolverli perchè non sono mappati a delle pagine fisiche memorizzate sul server. L’unica soluzione possibile, anche se non è molto elegante, è quella di aggiungere l’estensione .aspx a tutti gli URL del nostro sito.
Per farlo dobbiamo modificare le regole di routing presenti nel file Global.asax.cs (o Global.asax.vb) in questo modo:
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
);
}
aggiungendo l’estensione .aspx.
Passiamo ora al problema successivo. Digitando l’indirizzo del mio sito (es. www.matteopenna.it) si riceve un messaggio “404 – Non trovato”.
L’unico modo per risolvere anche questo problema è quello di aggiungere alla root del progetto un nuovo Web Form e chiamarlo index.aspx.
Nel code-behind di questo file, aggiungere il seguente codice nell’evento Page_Load:
protected void Page_Load(object sender, EventArgs e) {
Context.Response.Redirect("home.aspx", true);
}
in modo che la richiesta alla pagina iniziale del sito venga rediretta al controller Home ed alla action predefinita.
Ci rimangono più solo da modificare tutti gli Html.ActionLink e gli Html.RenderPartial presenti nelle nostre View nel modo seguente:
<% System.Web.Mvc.Html.RenderPartialExtensions.RenderPartial(this.Html, "LogOnUserControl"); %> <%= System.Web.Mvc.Html.LinkExtensions.ActionLink(this.Html, "Home", "Index", "Home") %>
Nel caso avessimo dei link scritti a mano nel codice dobbiamo ricordarci di aggiungere il suffisso .aspx al nome del controller.
A questo punto facendo un rebuild del progetto e una pubblicazione sul nostro server Aruba tutto dovrebbe funzionare.
Ringrazio gli autori dei seguenti articoli per avermi aiutato non poco nel risolvere questo problema:
http://stefanopaluello.spaces.live.com/blog/cns!B706E2DAF7520268!594.entry
http://www.klopfenstein.net/lorenz.aspx/deploying-an-asp-net-mvc-website-on-iis-6-and-net-2-0.


grazie mille funziona.
ottima idea quella di aggiungere una index con redirect, anche perchè la soluzione offerta da Microsoft di aggiungere nel global.asax: routes.MapRoute(“Root”, “”, new { controller = “Home”, action = “Index”, id = “” } );
non funziona e non capisco perchè.
@andrea: credo che il codice che hai indicato non funzioni, anche se indicato da Microsoft, per delle impostazioni proprie dei server condivisi Aruba.
Hrry0m puyikshwfokd, [url=http://zimhgznfghew.com/]zimhgznfghew[/url], [link=http://qcyufegiecei.com/]qcyufegiecei[/link], http://zmxtgcqywnjz.com/