2011-11-07 4 views
7

persone,ASP.NET MVC 3: spostata l'app nella directory virtuale. Cosa devo cambiare?

Ho lavorato a un'app MVC 3. Stavo usando il web server integrato di VS 2010. Oggi, per vari motivi, mi è stato chiesto di spostarlo in una directory virtuale ed eseguirlo su IIS 7, ancora sul mio PC di sviluppo.

Ora che il suo URL è "localhost/MyVirtualDirectory" anziché "localhost: 12345", cosa è necessario modificare per rendere funzionante il routing e dove?

Non sto utilizzando tag di ancoraggio HTML o reindirizzamenti, solo @ Html.ActionLink e così via. Secondo quello che ho letto, se ho fatto le cose in modo MVC, questo cambiamento avrebbe dovuto essere trasparente.

Ma all'inizio il reindirizzamento post-autenticazione non riesce. Su l'autenticazione, si suppone di restituire il risultato di

this.RedirectToAction("index", "Home") 

Avete indovinato: invece di "/ myVirtualDirectory/casa" il reindirizzamento va a "/ home". Quale fallisce.

Quindi manca qualcosa che deve essere impostato. Che cos'è?

Grazie, tutto.

+0

cosa fa il tuo 'RegisterRoutes' assomiglia nella tua Global.asax? –

+0

Probabilmente hai configurato IIS in modo errato. Questo dovrebbe essere completamente trasparente. –

+0

@DarinDimitrov OK, sono pronto a crederci. Le app MVC devono essere configurate in modo diverso dalle app WebForms? –

risposta

3

In IIS, selezionare la directory virtuale e "Converti in applicazione". Inoltre, se si utilizza la mappa del percorso di default nel tuo Global.asax si dovrebbe leggere qualcosa di simile:

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

Ragionamento: Se mettete la vostra applicazione MVC in una sotto-directory di un'altra applicazione allora IIS prenderà in considerazione la root di quell'altra applicazione invece della radice della tua applicazione MVC. Se questo è il comportamento che si desidera (improbabile), allora avete bisogno di modificare la vostra Global.asax per tenerne conto:

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

Grazie mille. Tuttavia, secondo IIS la mia directory virtuale è già un'applicazione. Ho IIS7.5 e, nella visualizzazione Contenuto sito Web predefinito, la mia directory virtuale ha un "tipo" di Applicazione. –

+0

Ok, quando hai scritto la directory virtuale nella tua domanda, l'ho presa come un possibile indicatore del fatto che non avevi specificato la directory come un'applicazione. Potresti verificare le impostazioni del pool di app, ecc., Ma come accennato in precedenza, questo probabilmente diventa più una domanda serverfault.com. –

+0

Ho trovato il mio problema, che si è rivelato essere un URL derivato in modo errato in un'istruzione di reindirizzamento. La tua è una buona risposta alla domanda, però - mi è capitato di sbagliare su quello che stava realmente accadendo. Grazie mille per aver risposto! –

Problemi correlati