Question

J'ai les éléments suivants dans mon fichier 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 = "" }
);

Mon SearchController ressemble à ceci

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

et Index.aspx affichent simplement ViewData ["quotID" "] pour le moment.

J'ai un répertoire virtuel configuré dans IIS sous Windows XP appelé Test.

Si je pointe mon navigateur sur http: // localhost / Test / , le nombre 1000 s'affiche comme prévu. Toutefois, si j'essaie http: // localhost / Test / 1000 , une erreur de page introuvable s'affiche. Des idées?

Existe-t-il des considérations particulières pour l'exécution de MVC dans un répertoire virtuel?

Était-ce utile?

La solution

IIS 5.1 interprète votre URL de manière à rechercher un dossier nommé 1000 dans le dossier nommé Test. Pourquoi est-ce vrai?

  

Cela se produit car IIS 6 uniquement   invoque ASP.NET quand il voit un   "Extension de nom de fichier" dans l'URL   mappé sur aspnet_isapi.dll (qui est un   Filtre ISAPI C / C ++ responsable de   invoquer ASP.NET). Puisque le routage est un   .NET IHttpModule appelé   UrlRoutingModule, il ne reçoit pas   invoqué sauf si ASP.NET lui-même obtient   invoqué, ce qui n'arrive que lorsque   aspnet_isapi.dll est appelé, qui   n’arrive que quand il y a un .aspx dans   l'URL. Donc, non .aspx, non   UrlRoutingModule, d'où le 404.

La solution la plus simple est:

  

Si cela ne vous dérange pas d’avoir .aspx dans votre   URL, il suffit de passer par votre routage   config, en ajoutant .aspx avant un   slash avant dans chaque motif. Pour   exemple, utiliser   {contrôleur} .aspx / {action} / {id} ou   myapp.aspx / {contrôleur} / {action} / {id}.   Ne mettez pas .aspx dans le   noms de paramètres entre parenthèses, ou dans   les valeurs par défaut, car il n’est pas   fait vraiment partie du nom du contrôleur -   c’est juste dans l’URL pour satisfaire IIS.

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

Autres conseils

Si vous le faites sous Windows XP, vous utilisez IIS 5.1. Vous devez obtenir ASP.Net pour traiter votre demande. Vous devez soit ajouter une extension à vos routes ({contrôleur} .mvc / {action} / {id}) et mapper cette extension sur ASP.Net ou mapper toutes les demandes sur ASP.Net. Le http: // localhost / Test fonctionne car il va à Default.aspx, qui est traité spécialement dans les projets MVC.

De plus, vous devez spécifier http: // localhost / Test / Search / Index / 1000 . Le contrôleur et les actions ne sont pas facultatifs si vous souhaitez spécifier un ID.

Plusieurs facteurs doivent être pris en compte lors de l’utilisation de répertoires virtuels dans votre application.

La première est que la plupart des navigateurs n'envoient pas de cookies provenant d'un répertoire virtuel à un autre, même si les applications résident sur le même serveur.

Essayez de définir le chemin virtuel: cliquez avec le bouton droit sur le projet MVC, les propriétés, l’onglet Web, puis entrez l’emplacement approprié.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top