如何在ASP.NET中获取根域URI?


Answers:


79

HttpContext.Current.Request.Url可以为您提供有关URL的所有信息。并且可以将网址分解为多个片段。


4
是的,为什么要投反对票?看不到标记为答案的东西-经常被否决。:/
Zack

4
我也不喜欢这个答案。blesh给出了正确的选择,这应该被标记为答案...
Michal B.11 /

-1-Request.Url通常提供一个URL,例如“ / folder1 / folder2”,并且完全排除该域。
贾斯汀

4
@Justin:Request.Url为您提供一个Uri对象,该对象为您分解了所有部分。它不应该给您一个字符串。至少我没有使用.net版本
JoshBerke 2012年

6
可以通过添加使它像下面的答案一样工作且具有更多投票权的代码来改进此答案……
theJerm 2012年

171
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);

Uri :: GetLeftPart方法

GetLeftPart方法返回一个字符串,其中包含URI字符串的最左侧部分,以part指定的部分结尾。

UriPartial枚举

URI的方案和权限段。


5
然后解析网址要好得多!
Evgenyt

1
这是最好的答案!tnx!
AminM

这应该是选定的答案。不必要的太多字符串操作。
Ghasan

1
使用此方法,http:// www.lala.xxx/blah/blah将返回http:// www.lala.xxx
真爱

+1与.Authority不同,在我在localhost上进行的测试中,.Authority保留了协议(http://)部分。
GGleGrand

122

对于仍然想知道的人,可以在http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/中找到更完整的答案。

public string FullyQualifiedApplicationPath
{
    get
    {
        //Return variable declaration
        var appPath = string.Empty;

        //Getting the current context of HTTP request
        var context = HttpContext.Current;

        //Checking the current context content
        if (context != null)
        {
            //Formatting the fully qualified website url/name
            appPath = string.Format("{0}://{1}{2}{3}",
                                    context.Request.Url.Scheme,
                                    context.Request.Url.Host,
                                    context.Request.Url.Port == 80
                                        ? string.Empty
                                        : ":" + context.Request.Url.Port,
                                    context.Request.ApplicationPath);
        }

        if (!appPath.EndsWith("/"))
            appPath += "/";

        return appPath;
    }
}

4
工作完美。如果站点是server:8080 / MySiteName,它将正确获取它。
Michael La Voie

2
感谢您分享实际代码,而不是其他地方的链接。
theJerm

2
context.Request.Url.Port == 80将在HTTPS内引起问题
-Evgenyt

7
注意!不适用于https。对于https context.Request.Url.Port == 80 ,请(context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")使用以下内容替换 或使用以下答案
razon 2014年

1
对于本地主机也适用(如果您正在测试本地设置)。如果不需要端口,则可以使用“ http://” + HttpContext.Current.Request.Url.Host;
Cyber​​Hawk 2015年

32

如果示例网址为http://www.foobar.com/Page1

HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"


HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"


HttpContext.Current.Request.Url.Scheme; //returns "http/https"


HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"

1
不,不。.Host"http://www.foobar.com/Page1"www.foobar.com,没有foobar.com
tchelidze

1
是的,您是对的,更新了答案。@tchelidze感谢
Dheeraj Palagiri '19

27
string hostUrl = Request.Url.Scheme + "://" + Request.Url.Host; //should be "http://hostnamehere.com"

16

要获取整个请求URL字符串:

HttpContext.Current.Request.Url

要获取请求的www.foo.com部分:

HttpContext.Current.Request.Url.Host

请注意,在某种程度上,您受制于ASP.NET应用程序之外的因素。如果将IIS配置为接受您的应用程序的多个主机头或任何主机头,则通过DNS解析到您的应用程序的那些域中的任何一个都可能显示为“请求网址”,具体取决于用户输入的域名。


1
这里最简单的解决方案
full_prog_full 2016年

4
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;

host.com =>返回host.com
s.host.com =>返回host.com

host.co.uk =>返回host.co.uk
www.host.co.uk =>返回host.co.uk
s1.www.host.co.uk =>返回host.co.uk


我意识到这是一篇过时的文章,但是NQuenault做得很好,我对Regex Expressions的表现并不满意。正是我所需要的。
JeffreyJ

@nquenault关于如何最好地处理主机名(如www.abc.com)的任何想法?谢谢!
加里·伊万公园

4

-添加端口可以在运行IIS Express时提供帮助

Request.Url.Scheme + "://" + Request.Url.Host + ":" + Request.Url.Port


3

我知道这个年龄较大,但现在正确的方法是

string Domain = HttpContext.Current.Request.Url.Authority

这将获取带有服务器端口的DNS或IP地址。



1

下面的C#示例:

string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
  scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();

1
string host = Request.Url.Host;
Regex domainReg = new Regex("([^.]+\\.[^.]+)$");
HttpCookie cookie = new HttpCookie(cookieName, "true");
if (domainReg.IsMatch(host))
{
  cookieDomain = domainReg.Match(host).Groups[1].Value;                                
}

1

这将专门返回您的要求。

Dim mySiteUrl = Request.Url.Host.ToString()

我知道这是一个老问题。但是我需要相同的简单答案,这将返回所要求的内容(不带http://)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.