web-dev-qa-db-fra.com

Comment obtenir l'URL de base dans le contrôleur API Web?

Je sais que je peux utiliser Url.Link() pour obtenir l'URL d'une route spécifique, mais comment puis-je obtenir l'URL de base de l'API Web dans le contrôleur API Web?

60

Vous pouvez utiliser la propriété VirtualPathRoot de HttpRequestContext (request.GetRequestContext().VirtualPathRoot)

40
Kiran Challa

Dans la méthode d'action de la demande à l'URL " http: // localhost: 85458/api/ctrl/ "

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

cela vous donnera http: // localhost: 85458

67
mLar
Url.Content("~/")

travaillé pour moi!

30
Athadu

C'est ce que j'utilise:

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

Ensuite, lorsque je le combine avec un autre chemin relatif , j’utilise ce qui suit:

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

J'injecte ce service dans mes contrôleurs.

 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

Utilisez l'extrait suivant de la classe d'assistance Url

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

L'article complet est disponible ici: http://blogs.msdn.com/b/roncain/archive/2012/07/17/using-the-asp-net-web-api-urlhelper.aspx

C’est la méthode officielle qui ne nécessite aucune aide ou solution de contournement . Si vous regardez cette approche, c’est comme ASP.NET MVC

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

D'abord, vous obtenez l'URL complète en utilisant HttpContext.Current.Request.Url.ToString();, puis remplacez l'URL de votre méthode en utilisant Replace ("utilisateur/identifiant", "").

Le code complet sera 

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

Vous ne savez pas s'il s'agit d'un ajout de Web API 2, mais RequestContext a une propriété Url qui est une UrlHelper: HttpRequestContext Properties . Il a Link et Content méthodes. Détails ici

1
Mrchief

Sur la base de Athadu answer, j’écris une méthode d’extension, puis dans la classe de contrôle, vous pouvez obtenir l’URL racine par this.RootUrl();.

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

Dans ASP.NET Core ApiController, la propriété Request correspond uniquement au message. Mais il y a toujours Context.Request où vous pouvez obtenir les informations attendues. Personnellement j'utilise cette méthode d'extension:

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. Authentification
    1.1 https://lalpathlabs.com/partner/api/v1/login
    Ceci est utilisé pour authentifier un utilisateur existant basé sur un nom d'utilisateur et un mot de passe.
    Demander JSON: {"nom d'utilisateur": "", "mot de passe": ""}
    Champ Remarque Type Longueur Nom d'utilisateur obligatoire Nom d'utilisateur de l'utilisateur Chaîne 3-20 Oui Mot de passe Mot de passe de l'utilisateur Chaîne 3-30 Oui
    Réponse attendue: 200 (succès)
    .____
    400 (Requête incorrecte) 401 (Non autorisé)
0
krishna

envoyez une GET à une page et le contenu de la réponse sera la réponse. URL de la base: http://website/api/

0
zeo