J'utilise le module Rewrite IIS 7 pour réécrire une URL comme entrant:exception ASP.NET MVC UrlHelper.GenerateUrl: "Impossible d'utiliser l'un des principaux .. pour sortir au-dessus du répertoire principal"
à
http://server/application/controller/year/all
tout fonctionne très bien, sauf quand, lors du traitement de la requête réécrite, j'utilise la méthode UrlHelper.GenerateUrl() de MVC:
UrlHelper.GenerateUrl(
"Assets",
"Css",
"Asset",
new RouteValueDictionary(new { site = site.Name, assetPath = assetPath }),
RouteTable.Routes,
controllerContext.RequestContext,
false);
appel de cette méthode dans un HttpException:
System.Web.HttpException: Cannot use a leading .. to exit above the top directory.
at System.Web.Util.UrlPath.ReduceVirtualPath(String path)
at System.Web.Util.UrlPath.Reduce(String path)
at System.Web.VirtualPath.Combine(VirtualPath relativePath)
at System.Web.VirtualPathUtility.Combine(String basePath, String relativePath)
at System.Web.Mvc.PathHelpers.GenerateClientUrlInternal(HttpContextBase httpContext, String contentPath)
at System.Web.Mvc.PathHelpers.GenerateClientUrl(HttpContextBase httpContext, String contentPath)
at System.Web.Mvc.UrlHelper.GenerateUrl(String routeName, String actionName, String controllerName, RouteValueDictionary routeValues, RouteCollection routeCollection, RequestContext requestContext, Boolean includeImplicitMvcValues)
En regardant le RequestContext, il semble que tous les chemins de demande sont corrects (c.-à-ont les valeurs réécrites). Je n'arrive pas à comprendre pourquoi il essaie de sortir du répertoire de premier niveau ... Il n'y a nulle part où nous utilisons ... dans un chemin.
J'ai également vérifié que RewriteModule est au-dessus du module UrlRouting dans IIS. Bien que je puisse entrer dans les méthodes du framework, je ne peux pas examiner les variables locales (que ce soit dans VS ou WinDbg) car il a été optimisé par le compilateur.
Des pensées?
Je suis confronté au même problème et je n'ai pas trouvé de solution. Pour l'instant, je ne fais que coder des liens hypertexte au lieu d'utiliser Html.ActionLink où j'obtiens l'exception. Avez-vous trouvé une solution? –
@Rob: nous n'avons pas trouvé de solution. J'ai été capable de le suivre jusqu'à la présence de l'en-tête X_ORIGINAL_URL dans la requête. IIS place cet en-tête à chaque fois qu'il réécrit une URL. Il utilise cet en-tête pour essayer d'annuler la réécriture de l'url, car vous ne voulez probablement pas que l'URL générée suive le format réécrit. Il se bloque pour nous quand il prend l'URL d'origine en considération. Cela n'a pas beaucoup de sens d'utiliser * toujours * l'URL d'origine - pour nous, nous voulons juste qu'elle génère l'URL et ignore l'URL d'origine. Il n'y a aucun moyen que nous avons trouvé pour remplacer ce comportement. –
J'ai fini par passer d'une réécriture à une redirection et cela a réglé le problème. nos URL contiennent maintenant la zone, ce qui n'est pas idéal, mais il est plus important que le site fonctionne sans trop se soucier du routage de MVC. –