it-swarm.com.de

Wie erhalte ich eine Basis-URL im Web API Controller?

Ich weiß, dass ich Url.Link() verwenden kann, um die URL einer bestimmten Route abzurufen, aber wie kann ich die Web-API-Basis-URL im Web-API-Controller erhalten?

60

Sie können die VirtualPathRoot-Eigenschaft von HttpRequestContext (request.GetRequestContext().VirtualPathRoot) verwenden.

40
Kiran Challa

In der Aktionsmethode der Anforderung an die URL " http: // localhost: 85458/api/ctrl/ "

var baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) ;

dadurch erhalten Sie http: // localhost: 85458

67
mLar
Url.Content("~/")

für mich gearbeitet

30
Athadu

Das ist was ich benutze:

Uri baseUri = new Uri(Request.RequestUri.AbsoluteUri.Replace(Request.RequestUri.PathAndQuery, String.Empty));

Wenn ich es dann mit einem anderen relativen Pfad kombiniere, verwende ich Folgendes:

string resourceRelative = "~/images/myImage.jpg";
Uri resourceFullPath = new Uri(baseUri, VirtualPathUtility.ToAbsolute(resourceRelative));
12
David Martin

Ich injiziere diesen Dienst in meine Controller.

 public class LinkFactory : ILinkFactory
 {
    private readonly HttpRequestMessage _requestMessage;
    private readonly string _virtualPathRoot;


    public LinkFactory(HttpRequestMessage requestMessage)
    {
        _requestMessage = requestMessage;
        var configuration = _requestMessage.Properties[HttpPropertyKeys.HttpConfigurationKey] as HttpConfiguration;
        _virtualPathRoot = configuration.VirtualPathRoot;
        if (!_virtualPathRoot.EndsWith("/"))
        {
            _virtualPathRoot += "/";
        }
    }

    public Uri ResolveApplicationUri(Uri relativeUri)
    {

        return new Uri(new Uri(new Uri(_requestMessage.RequestUri.GetLeftPart(UriPartial.Authority)), _virtualPathRoot), relativeUri);
    }

}
10
Darrel Miller

Verwenden Sie den folgenden Ausschnitt aus der URL-Helfer-Klasse

Url.Link("DefaultApi", new { controller = "Person", id = person.Id })

Den vollständigen Artikel finden Sie hier: http://blogs.msdn.com/b/roncain/archive/2012/07/17/using-the-asp-net-web-api-urlhelper.aspx

Dies ist der offizielle Weg, für den kein Helfer oder Workaround erforderlich ist .. Wenn Sie sich diesen Ansatz anschauen, ist dies wie bei ASP.NET MVC

8
Raffaeu
new Uri(Request.RequestUri, RequestContext.VirtualPathRoot)
3
MoonStom

Zuerst erhalten Sie eine vollständige URL mit HttpContext.Current.Request.Url.ToString();, dann ersetzen Sie Ihre Methoden-URL mit Replace ("user/login", "").

Vollständiger Code wird sein 

string Host = HttpContext.Current.Request.Url.ToString().Replace("user/login", "")
1
Shafiq Rabbi

Nicht sicher, ob dies ein Web-API-2-Zusatz ist, aber RequestContext hat eine Url-Eigenschaft, die eine UrlHelper: HttpRequestContext-Eigenschaften ist. Es hat Link und Content Methoden. Details hier

1
Mrchief

Basierend auf der Antwort von Athadu schreibe ich eine Erweiterungsmethode, dann können Sie in der Controller-Klasse Root-URL erhalten, indem Sie this.RootUrl();

public static class ControllerHelper
{
    public static string RootUrl(this ApiController controller)
    {
        return controller.Url.Content("~/");
    }
}
1
yu yang Jian

In ASP.NET Core ApiController ist die Request-Eigenschaft nur die Nachricht. Es gibt jedoch noch Context.Request, wo Sie die erwarteten Informationen erhalten können. Persönlich benutze 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}";
}
0
Jan Zahradník
  1. Authentifizierung
    1.1 https://lalpathlabs.com/partner/api/v1/login
    Wird verwendet, um einen vorhandenen Benutzer anhand des Benutzernamens und des Kennworts zu authentifizieren.
    JSON anfordern: {"Benutzername": "", "Kennwort": ""}
    Feld Bemerkung Typ Länge Erforderlicher Benutzername Benutzername des Benutzers Zeichenfolge 3-20 Ja Kennwort Kennwort des Benutzers Zeichenfolge 3-30 Ja
    Erwartete Antwort: 200 (Erfolg)
    {"firstName": "Shishir", "lastName": "Shukla", "token": "q6anhl96p9ilikkbe2r84pfatd2dh9e2"}
    400 (schlechte Anforderung) 401 (nicht autorisiert)
0
krishna

senden Sie eine GET an eine Seite und der beantwortete Inhalt wird die Antwort sein. Basis-URL: http://website/api/

0
zeo