c# - tutorial - mvc example




ASP.NET MVC in una directory virtuale (3)

Ci sono una serie di considerazioni quando si usano le directory virtuali nella propria applicazione.

Uno è particolare è che la maggior parte dei browser non invierà i cookie provenienti da una directory virtuale a un'altra, anche se le app risiedono sullo stesso server.

Ho il seguente nel mio Global.asax.cs

routes.MapRoute(
    "Arrival",
    "{partnerID}",
    new { controller = "Search", action = "Index", partnerID="1000" }
);

routes.MapRoute(
    "Default",
    "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = "" }
);

Il mio SearchController si presenta così

public class SearchController : Controller
{
    // Display search results
    public ActionResult Index(int partnerID)
    {
        ViewData["partnerID"] = partnerID;
        return View();
    }
}

e Index.aspx mostra semplicemente ViewData ["partnerID"] al momento.

Ho installato una directory virtuale in IIS su Windows XP chiamata Test.

Se punto il mio browser su http: // localhost / Test / quindi ottengo 1000 visualizzato come previsto. Tuttavia, se provo http: // localhost / Test / 1000 ottengo un errore di pagina non trovato. Qualche idea?

Esistono considerazioni speciali per l'esecuzione di MVC in una directory virtuale?


Prova a impostare il percorso virtuale: fai clic con il pulsante destro del mouse su progetto mvc, proprietà, scheda Web, quindi inserisci la posizione appropriata.


IIS 5.1 interpreta l'URL in modo tale che cerchi una cartella denominata 1000 nella cartella denominata Test. Perchè è così?

Ciò si verifica perché IIS 6 richiama ASP.NET solo quando vede una "estensione del nome file" nell'URL mappato su aspnet_isapi.dll (che è un filtro ISAPI C / C ++ responsabile della chiamata ad ASP.NET). Poiché il routing è un IHttpModule .NET chiamato UrlRoutingModule, non viene richiamato a meno che non venga richiamato ASP.NET stesso, che si verifica solo quando viene richiamato aspnet_isapi.dll, che si verifica solo quando c'è un .aspx nell'URL. Quindi, no .aspx, nessun UrlRoutingModule, quindi il 404.

La soluzione più semplice è:

Se non ti dispiace avere .aspx nei tuoi URL, passa alla configurazione di routing, aggiungendo .aspx prima di una barra in avanti in ogni modello. Ad esempio, utilizza {controller} .aspx / {action} / {id} o myapp.aspx / {controller} / {action} / {id}. Non inserire .aspx all'interno dei nomi dei parametri parentesi graffa o nei valori "predefiniti", perché non fa realmente parte del nome del controller: è solo nell'URL che soddisfa IIS.

Fonte: http://blog.codeville.net/2008/07/04/options-for-deploying-aspnet-mvc-to-iis-6/





iis-5