2010-11-19 20 views
1

(Note: essayé de chercher une question similaire, mais le plus proche ne semble pas correspondre ma question encore. c.-à-MVC - Application root appears twice in url using Url.Content/Url.Action)URL de redirection + masquage déclenche le répertoire racine double pour Url.Content() & Html.Action() sous ASP.NET MVC 3 RC

J'ai actuellement deux ASP.NET MVC 3 applications RC fonctionnant sous un domaine à savoir

mydomain.com/app1

mydomain.com/app2

maintenant , parce que c'est une application distincte, je me suis inscrit pour un autre nom de domaine e et activé le transfert de masque vers l'une des applications (c.-à-d. http://foo.com chargerait http://mydomain.com/app1 et dans le navigateur, il ne montrera http://foo.com, non http://mydomain.com/app1)

Eh bien, c'est là MVC commence à avoir des plaintes. Les deux Url.Content() & Html.Action() générer des URL inattendues. Par exemple, dans le cas de Html.Action(), si je @Html.ActionLink("About", "Index", "About"), je me attends http://foo.com/about, mais finissent par obtenir http://foo.com/app1/about

Parce que http://foo.com/app1/about se traduit http://mydomain.com/app1/app1/about, de toute évidence le lien ne fonctionne pas .

De même, pour Url.Content, si je href="@Url.Content("~/Content/Site.css")", le navigateur ne parviendra pas à charger la feuille de style, car il pense que l'emplacement est à http://foo.com/app1 /Content/Site.css, au lieu de http://foo.com/Content/Site.css

Y at-il un moyen, je peux faire MVC oublier son répertoire de départ (ie supprimer "app1/" de son URL généré?)

Merci d'avoir lu, et s'il vous plaît laissez-moi savoir si des informations supplémentaires sont nécessaires ici.

Répondre

0

À l'heure actuelle, il existe des solutions de contournement.

Pour Url.Content(), nous allons supprimer tout simplement "~" de Url.Content("~/..."), afin de se débarrasser de ce chemin relatif (c.-à-/app1)

En ce qui concerne Html.ActionLink(), la solution semble désordonné, parce que le chemin relatif est toujours supposé, de sorte que la solution de contournement ici est temporaire. Quelqu'un a une meilleure solution là-bas?

public static MvcHtmlString ActionLinkAbsolute(
        this HtmlHelper<dynamic> htmlHelper, string linkText, string actionName, string controllerName) 
       { 
        MvcHtmlString result = LinkExtensions.ActionLink(htmlHelper, linkText, actionName, controllerName); 
        result = new MvcHtmlString(result.ToHtmlString().Replace(VirtualPathUtility.ToAbsolute("~"), String.Empty)); 
        return result; 
       } 

La solution de contournement n'est pas sans conséquence. Pour prendre en charge le masquage d'URL et ignorer le chemin relatif, http://mydomain.com/app1 ne générera pas le lien attendu, car il supprimera toujours le chemin relatif. Ce n'est pas parfait, mais c'est un inconvénient avec lequel je peux vivre.