Wie kann ich schnell feststellen, wie die Stamm-URL für meine ASP.NET MVC-Anwendung lautet? Das heißt, wenn IIS so eingestellt ist, dass es meine Anwendung unter http://example.com/foo/bar bereitstellt , möchte ich in der Lage sein, diese URL auf zuverlässige Weise abzurufen, ohne die aktuelle URL von der abzurufen fordern Sie es an und zerhacken Sie es auf eine fragile Art und Weise, die kaputt geht, wenn ich meine Aktion umleitung.
Der Grund, warum ich die Basis-URL benötige, ist, dass diese Webanwendung eine andere aufruft, die den Stamm der Anrufer-Webanwendung für Rückrufzwecke benötigt.
quelle
urlHelper.Content("~")
? Wie erstelle ich defineurlHelper
? Vielen Dank!var request = HttpContext.Current.Request; urlBase = string.Format("{0}://{1}{2}", request.Url.Scheme, request.Url.Authority, (new System.Web.Mvc.UrlHelper(request.RequestContext)).Content("~"));
ControllerContext.RequestContext.HttpContext.Request
@Url.Content("~")
wird aufgelöst zu"/"
, was nicht die Basis-URL ist.Also hat keiner der hier aufgeführten für mich funktioniert, aber mit ein paar der Antworten habe ich etwas zum Laufen gebracht:
Update für ASP.NET Core / MVC 6:
ASP.NET Core
macht diesen Prozess etwas schmerzhafter, besonders wenn Sie tief in Ihrem Code sind. Sie haben 2 Möglichkeiten, um an derHttpContext
1) Geben Sie es von Ihrem
controller
:dann in
model
:2) Vielleicht ist der sauberere Weg, es in Ihre Klasse zu injizieren, was mit der Registrierung der Typen in Ihrer Klasse beginnt
Startup:
dann lass es dir so spritzen:
In beiden Fällen ist hier die Aktualisierung für
.NET Core
GetBaseUrl()
:quelle
Helpers
in der Basis meiner Appstatic
aufgerufen , ich habe eine Klasse namensStatics
und ich habe Funktionen wie die oben genannten dort ... stellen Sie nur sicher, dass Sie die oben genannten vonpublic string GetBaseUrl()
in ändernpublic static string GetBaseUrl()
Statics
, sondern habe sie in spezifischere Verwendungen unterteilt. In diesem Fall würde dies in meineUrlHelper
Klasse gehenIn Code:
MVC3 Razor Syntax:
quelle
/
anstelle des tatsächlichen Namens hinzugefügt .Url
? Steht Ihnen der Helfer sofort zur Verfügung? Vielleicht nur in derController
. Sicherlich nicht in demViewModel
oder einem anderen,class
wo Sie dies brauchen könnten.Vielleicht ist es eine Erweiterung oder Änderung der hier veröffentlichten Antworten, aber ich benutze einfach die folgende Zeile und es funktioniert:
Wenn mein Weg ist:
http://host/iis_foldername/controller/action
dann erhalte ich:
http://host/iis_foldername/
quelle
Das folgende Snippet funktioniert gut für mich in MVC4 und benötigt kein
HttpContext
verfügbares:quelle
jQuery.load()
, um die URL für den Controller und die Aktion zu$('#myplaceholder').load('@(Html.Raw(HttpRuntime.AppDomainAppVirtualPath))/MyController/MyAction', ...);
Der Trick beim Verlassen auf IIS besteht darin, dass sich IIS-Bindungen von Ihren öffentlichen URLs (WCF, die ich Ihnen ansehe) unterscheiden können, insbesondere bei Produktionsmaschinen mit mehreren Standorten. Ich tendiere dazu, die Konfiguration zu verwenden, um die "Basis" -URL explizit für externe Zwecke zu definieren, da dies tendenziell etwas erfolgreicher ist als das Extrahieren aus dem Request-Objekt.
quelle
Verwenden Sie dies für eine absolute Basis-URL. Funktioniert sowohl mit HTTP als auch mit HTTPS.
quelle
Dies ist eine Konvertierung einer asp.net-Eigenschaft in MVC . Es ist so ziemlich alles, was singt und tanzt.
Deklarieren Sie eine Helferklasse:
Verwendungszweck:
So verwenden Sie eine Steuerung:
So verwenden Sie eine Ansicht:
quelle
In MVC _Layout.cshtml:
Das verwenden wir!
quelle
<base>
. Sie können das Schema auch so weglassen, dass es mit http oder https funktioniert. Das heißt, Sie können die URL mit beginnen//
.Dies funktioniert gut für mich (auch mit einem Load Balancer):
Insbesondere wenn Sie nicht standardmäßige Portnummern verwenden, erscheint die Verwendung von Request.Url.Authority zunächst als guter Hinweis, schlägt jedoch in einer LB-Umgebung fehl.
quelle
Sie könnten eine statische Methode haben, die HttpContext.Current betrachtet und abhängig von der Host-ID entscheidet, welche URL (Entwicklungs- oder Live-Server) verwendet werden soll. HttpContext bietet vielleicht sogar eine einfachere Möglichkeit, dies zu tun, aber dies ist die erste Option, die ich gefunden habe, und sie funktioniert einwandfrei.
quelle
Sie können das folgende Skript in der Ansicht verwenden:
quelle
Für ASP.NET MVC 4 ist das etwas anders:
quelle
Dies funktioniert in ASP .NET MVC 4 In jeder Controller-Aktion, die Sie schreiben können: 1stline erhält die gesamte URL + Abfragezeichenfolge. 2. Zeile lokalen Pfad & Abfrage entfernen, letztes '/' Symbol. 3. Zeile '/' Symbol an letzter Stelle hinzufügen.
quelle
in einfachem HTML und ASP.NET oder ASP.NET MVC, wenn Sie Tag verwenden:
quelle
Für URLs mit Anwendungsalias wie http://example.com/appAlias/ ... Sie können dies versuchen:
quelle
Auf der Webseite selbst:
Im Javascript:
Das funktioniert für mein MVC-Projekt, hoffe es hilft
quelle
Ich habe dies in den Kopf meiner _Layout.cshtml eingefügt
quelle
Vielleicht ist es eine bessere Lösung.
mit
quelle
Für MVC 4:
quelle
Das Folgende hat für mich solide funktioniert
quelle
--output http: // localhost: 49626 / TEST /
quelle
Dies war meine Lösung (mit .net Core 3.1 in einem API-Controller):
quelle
Einfach in einer Zeile BaseUrl erhalten
quelle
Auch Sie können dies verwenden. Für die Rasierseiten ist es besser, sie zu verwenden als die anderen.
https://ml-software.ch/posts/getting-the-base-url-for-an-asp-net-core-mvc-web-application-in-your-static-javascript-files
quelle
Fügen Sie diese Funktion in der statischen Klasse in einem Projekt wie der Utility-Klasse hinzu:
Dienstprogramm.cs Inhalt:
Verwenden Sie diesen Code überall und genießen Sie ihn:
quelle