2016-08-03 33 views
1

Ich bin ziemlich neu bei MVC. Kürzlich habe ich eine Site entwickelt und hinter einem Proxy-Server gehostet. Ich greife auf meine Seite mit internalhostname/site/{controller}/{action}/{id} für den Test zu, was gut funktioniert. Wenn meine Benutzer die Site jedoch verbinden, verwenden sie eine externe URL wie folgt: externalhostname/apps/site/{controller}/{action}/{id}. Wenn nun meine Ansichten versuchen, einen Anruf an den Controller gemäß der Standardroutenkonfiguration zu initiieren, werden die erzeugten URLs zu externalhostname/site/{controller}/{action}/{id}, der Hinweis "/ apps" ist weg.Wie behandelt man einen virtuellen Pfad, der vom Proxy-Server in der MVC-Route erstellt wird?

Nun, das ist ein bekanntes Problem für mich. Da beim Erstellen der URL der Hostname "/ apps" nicht enthält. In anderen Sites, die auf der regulären ASP.NET-Seite erstellt wurden, würde ich einfach die URL-Erstellung übernehmen und den Host durch Hosts/Apps ersetzen, die das Problem beheben können. Aber ich weiß nicht, wie man das in der MVC-Welt macht.

Auch ich benutze Telerik Kontrollen (für MVC), die auch Anfragen von Controller und Aktion, die schließlich zu der falschen URL führen initiieren.

Die Routenkonfiguration ist Standard. Ich habe versucht, die Regel zu ändern, aber alle diese betreffen nur das URL-Format danach. Nichts könnte mir erlauben, das Verhalten davor zu ändern. Ich habe seit Tagen gekämpft und konnte keinen Ausweg sehen. Schätzen Sie etwas Rat. Vielen Dank.

Ich kann die Proxy-Regel nicht ändern. Das ist keine Option für mich.

Umgebung: MVC 4, IIS 7.0, wenn diese Angelegenheit.

+0

Es stellte sich heraus, dass das Problem außerhalb der MVC selbst war. Wenn Sie einen anderen Controller und eine Aktion innerhalb des Controllers aufrufen, ist das in Ordnung. Wenn ich jedoch versuche, den Controller/die Aktion über die Ansicht mit Telerik-Steuerelementen oder anderen HTML-Steuerelementen aufzurufen, wird die falsche URL erstellt. Glücklicherweise erlauben diese Steuerelemente den Aufruf der Aktion mit absoluter URL. Ich habe eine Methode erstellt, um diese URLs basierend auf meinem Hostnamen zu generieren (wo ich weiß, würde diesen "/ apps /" Pfad einführen). Dadurch wird der richtige Pfad für meine Anforderungen erstellt und Sie gelangen zu den richtigen Controllern. –

Antwort

0

Versuchen Sie einen neuen Eintrag in Ihrer Routenkonfiguration hinzuzufügen.

routes.MapRoute(
    "Default2", // Route name 
    "apps/{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults, 
); 

routes.MapRoute(
    "Default", // Route name 
    "{controller}/{action}/{id}", // URL with parameters 
    new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
); 

Beachten Sie die Reihenfolge.

+0

Danke für die Antwort. Ich habe es tatsächlich versucht und es baut die URL so auf: externalhostname/apps/site/apps/{controller}/{aktion}/{id}. Das hat der Situation nicht geholfen. –

+0

Ich habe meine Frage ein wenig bearbeitet, um klarer zu sein. Ich hätte bei einigen Wörtern keine spitzen Klammern verwenden sollen. –

+0

@ChenWang yah ein wenig Verwirrung. jetzt ist meine Antwort nicht gültig :) – Sherlock