web-dev-qa-db-fra.com

Demande.url.host et applicationPath dans un appel

Y a-t-il un moyen d'obtenir HttpContext.Current.Request.Url.Host et HttpContext.Current.Request.ApplicationPath Dans un appel?

Quelque chose comme "URL complète de l'application"?

EDIT: Clarification - Ce dont j'ai besoin, c'est la partie dans []:

http://[www.mysite.com/mywebapp]/Pages/Default.aspx

Je demande simplement par curiosité.

Edit 2: Merci pour toutes les réponses, mais aucun d'entre eux n'étaient exactement ce que je cherchais. FYI, j'ai résolu le problème de cette façon (mais je suis toujours intéressé à savoir s'il y a une manière plus lisse):

public string GetWebAppRoot()
{
    if(HttpContext.Current.Request.ApplicationPath == "/")
        return "http://" + HttpContext.Current.Request.Url.Host;
    else
        return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath;
}
16
Marcus L

Cela ne fonctionnait pas sur mon localhost avec un numéro de port ainsi de modification mineure:

  private string GetWebAppRoot()
    {
        string Host = (HttpContext.Current.Request.Url.IsDefaultPort) ? 
            HttpContext.Current.Request.Url.Host : 
            HttpContext.Current.Request.Url.Authority;
        Host = String.Format("{0}://{1}", HttpContext.Current.Request.Url.Scheme, Host);            
        if (HttpContext.Current.Request.ApplicationPath == "/")
            return Host;
        else
            return Host + HttpContext.Current.Request.ApplicationPath;
    }
18
Samuel

Ce que vous devriez vraiment faire est:

return String.Format("{0}://{1}/", Request.Url.Scheme, Request.Url.Host);

De cette façon, cela fonctionne si vous utilisez https (ou un autre schéma!)

6
Dan Diplo

Merci pour toutes les réponses, mais aucun d'entre eux n'était exactement ce que je cherchais. FYI, j'ai résolu le problème de cette façon (mais je suis toujours intéressé à savoir s'il y a une manière plus lisse):

public string GetWebAppRoot()
{
    if(HttpContext.Current.Request.ApplicationPath == "/")
        return "http://" + HttpContext.Current.Request.Url.Host;
    else
        return "http://" + HttpContext.Current.Request.Url.Host + HttpContext.Current.Request.ApplicationPath;
}
3
Marcus L

Chèque ce post :

public static Uri GetBaseUrl(HttpRequest request)
{
    Uri contextUri = new Uri(request.Url, request.RawUrl);
    UriBuilder realmUri = new UriBuilder(contextUri) { Path = request.ApplicationPath, Query = null, Fragment = null };
    return realmUri.Uri;
}

public static string GetAbsoluteUrl(HttpRequest request, string relativeUrl)
{
    return new Uri(GetBaseUrl(request), VirtualPathUtility.ToAbsolute(relativeUrl)).AbsoluteUri;
}

Si vous n'obtenez pas ce dont vous avez besoin de GetBaseURL directement, il devrait être possible de faire:

GetAbsoluteUrl(HttpContext.Current.Request, "/")

2
veggerby
HttpContext.Current.Request.Url.AbsoluteUri
1
Raj