2013-05-17 3 views
1

En bref, j'ai une application Web MVC qui a une classe proxy pour marshall demandes à une autre application Web dans le contexte de l'utilisateur connecté.ASP.Net MVC4 Routage ne fonctionne pas - mot réservé?

Tout cela fonctionne bien, sauf que certains des liens sortants (c'est-à-dire les liens entrants vers mon application MVC) de l'autre application web contiennent l'url "/ views".

Ces demandes doivent être mises en correspondance selon cette voie:

 routes.MapRoute(
      name: "TableauViews", 
      url: "views", 
      defaults: new { controller = "Tableau", action = "Views" } 
     ); 

Mais il ne se produit jamais. Si je change le nom de l'action du contrôleur en quelque chose d'autre et que j'entre l'URL correspondante dans un navigateur, cela fonctionne. Cela m'amène à soupçonner qu'il y a un problème de mappage d'une URL contenant le mot «vues» dans le cadre de son chemin. Quelqu'un peut-il confirmer cela?

+0

Pourriez-vous poster un lien complet, s'il vous plaît? Je parie que ce n'est pas seulement '/ view', n'est-ce pas? –

+0

Je peux imaginer '~/views' ne fonctionne pas mais' ~/mycontroller/views' je m'attendrais à travailler? –

+0

~/vues ne fonctionne pas mais je m'y attendrais aussi car j'ai mappé l'itinéraire selon l'OP. Si je change le nom de la méthode d'action (et l'URL de l'itinéraire) en quelque chose d'autre, par exemple views2 puis la méthode aqction est invoquée lorsque je navigue vers/views2 dans un navigateur. Et oui, ~/controller/views fonctionne car il utilise la route par défaut. –

Répondre

1

Le problème est l'ordre des opérations. Views est un dossier physique et un itinéraire. Le HttpHandler ASP.NET lira le web.config et bloquera tout ce qui va aux vues avant que le gestionnaire d'itinéraire ne prenne l'URL. Si vous regardez le fichier web.config dans votre dossier de vues (où vos vues sont stockés), vous verrez probablement quelque chose comme ceci:

<httpHandlers> 
    <add path="*" verb="*" type="System.Web.HttpNotFoundHandler"/> 
</httpHandlers> 

De plus, plus tard dans la configuration, il peut aussi être ceci:

<system.webServer> 
    <validation validateIntegratedModeConfiguration="false" /> 

    <handlers> 
     <remove name="BlockViewHandler"/> 
     <add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" /> 
    </handlers> 
</system.webServer> 

Ceci est votre coupable. Je suggérerais de nommer votre route quelque chose de plus comme "externalViews" ou simplement "external" pourrait aider. L'autre alternative consiste à supprimer la ligne ci-dessus de vos vues web.config, mais cela pourrait entraîner un comportement indésirable.

Cet article traite de restreindre uniquement certains types de fichiers au lieu de bloquer tout ce qui peut être utile pour vous.

http://blog.falafel.com/Blogs/j-tower/2014/03/28/loading-javascript-files-from-the-views-folder-in-asp-net-mvc

+0

Oui, ça marche pour moi. Merci. –

Questions connexes