Ich weiß, dass ich die Url.Link()
URL einer bestimmten Route abrufen kann, aber wie kann ich die Web-API-Basis-URL im Web-API-Controller abrufen?
url
asp.net-web-api
base-url
asp.net-web-api2
Nikolai Samteladze
quelle
quelle
Request.GetRequestContext().VirtualPathRoot
kehrt zurück/
. Ich hoste die Web-API auf localhost im Windows-Dienst mithilfe von Owin selbst. Gibt es in diesem Fall eine Möglichkeit, die Basis-URL abzurufen? Vielen Dank.using (WebApp.Start<Program>("http://localhost:9095/Test"))
Folgendes : Wo VirtualPathRoot zurückkehrt/Test
)http://localhost:5550/
und es kehrt korrekt zurück/
. Was ich meinte ist, wie manhttp://localhost:5550/
in diesem Fall kommt ...Request.RequestUri
) haben, können Sie die Anforderungs- Uri davon abrufen und das Schema, den Host und den Port finden ... richtig?In der Aktionsmethode der Anfrage an die URL " http: // localhost: 85458 / api / ctrl / "
Dadurch erhalten Sie http: // localhost: 85458
quelle
hat für mich gearbeitet!
quelle
Das benutze ich:
Wenn ich es dann mit einem anderen relativen Pfad kombiniere , verwende ich Folgendes:
quelle
Ich injiziere diesen Dienst in meine Controller.
quelle
Verwenden Sie das folgende Snippet aus der URL-Hilfsklasse
Der vollständige Artikel ist hier verfügbar: http://blogs.msdn.com/b/roncain/archive/2012/07/17/using-the-asp-net-web-api-urlhelper.aspx
Dies ist der offizielle Weg, der keine Hilfe oder Problemumgehung erfordert. Wenn Sie sich diesen Ansatz ansehen, ist er wie ASP.NET MVC
quelle
quelle
In .NET Core WebAPI (Version 3.0 und höher):
quelle
Zuerst erhalten Sie die vollständige URL mit
HttpContext.Current.Request.Url.ToString();
und ersetzen dann Ihre Methoden-URL mit Ersetzen ("Benutzer / Login", "").Vollständiger Code wird sein
quelle
In ASP.NET Core ist
ApiController
dieRequest
Eigenschaft nur die Nachricht. Aber es gibt immer nochContext.Request
Orte, an denen Sie erwartete Informationen erhalten können. Persönlich verwende ich diese Erweiterungsmethode:public static string GetBaseUrl(this HttpRequest request) { // SSL offloading var scheme = request.Host.Host.Contains("localhost") ? request.Scheme : "https"; return $"{scheme}://{request.Host}{request.PathBase}"; }
quelle
Ich bin nicht sicher, ob es sich um eine Web-API-2-Erweiterung handelt,
RequestContext
hat jedoch eineUrl
EigenschaftUrlHelper
: HttpRequestContext Properties . Es hatLink
undContent
Methoden. Details hierquelle
Basierend auf Athadus Antwort schreibe ich eine Erweiterungsmethode, dann können Sie in der Controller-Klasse die Root-URL von erhalten
this.RootUrl();
quelle
Senden Sie eine
GET
an eine Seite und der beantwortete Inhalt ist die Antwort. Basis-URL:http://website/api/
quelle
Fügen Sie einen Verweis auf System.Web hinzu
using System.Web;
Holen Sie sich den Host oder eine andere Komponente der gewünschten URL
string host = HttpContext.Current.Request.Url.Host;
quelle
Al WebApi 2, nur HttpContext.Current.Request.Path aufrufen;
quelle
Von
HttpRequestMessage
quelle