Domanda

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 mostrano semplicemente ViewData [" partnerID "] al momento.

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

Se indico il mio browser su http: // localhost / Test / , visualizzo 1000 come previsto. Tuttavia, se provo http: // localhost / Test / 1000 visualizzo un errore di pagina non trovata. Qualche idea?

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

È stato utile?

Soluzione

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

  

Ciò accade perché solo IIS 6   invoca ASP.NET quando vede un   & # 8220; estensione nome file & # 8221; nell'URL che & # 8217; s   mappato su aspnet_isapi.dll (che è un   Responsabile del filtro ISAPI C / C ++   invocando ASP.NET). Poiché il routing è a   È stato chiamato .NET IHttpModule   UrlRoutingModule, non lo ottiene   invocato a meno che non si ottenga ASP.NET stesso   invocato, che succede solo quando   aspnet_isapi.dll viene richiamato, che   succede solo quando c'è un .aspx in   l'URL. Quindi, no .aspx, no   UrlRoutingModule, da qui il 404.

La soluzione più semplice è:

  

Se non ti dispiace avere .aspx nel tuo   URL, basta passare attraverso il routing   config, aggiungendo .aspx prima di a   barra in avanti in ogni modello. Per   esempio, usa   {controller} .aspx / {action} / {id} o   myapp.aspx / {Controller} / {action} / {id}.   Non inserire .aspx all'interno di   nomi dei parametri tra parentesi graffe o in   il & # 8216; predefinito & # 8217; valori, perché non è & # 8217; t   fa davvero parte del nome del controller -   è solo nell'URL per soddisfare IIS.

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

Altri suggerimenti

Se lo stai facendo su Windows XP, stai usando IIS 5.1. È necessario ottenere ASP.Net per gestire la richiesta. Devi aggiungere un'estensione ai tuoi percorsi ({controller} .mvc / {action} / {id}) e mappare tale estensione su ASP.Net o mappare tutte le richieste su ASP.Net. Il http: // localhost / Test funziona perché va su Default.aspx che viene gestito appositamente nei progetti MVC.

Inoltre, è necessario specificare http: // localhost / Test / Search / Index / 1000 . Il controller e le azioni non sono facoltativi se si desidera specificare un ID.

Vi sono diverse considerazioni sull'uso delle directory virtuali nell'applicazione.

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

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

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