Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在ASP.NET中获取当前域名_C#_Asp.net - Fatal编程技术网

C# 如何在ASP.NET中获取当前域名

C# 如何在ASP.NET中获取当前域名,c#,asp.net,C#,Asp.net,我想在asp.net c#中获取当前域名 我正在使用这个代码 string DomainName = HttpContext.Current.Request.Url.Host; 我的URL是localhost:5858,但它只返回localhost 现在,我正在本地主机中使用我的项目。我想得到localhost:5858 例如,当我使用这个域时 www.somedomainname.com 我想获得somedomainname.com 请告诉我如何获取当前域名。尝试获取url的“左侧”,如下

我想在asp.net c#中获取当前域名

我正在使用这个代码

string DomainName = HttpContext.Current.Request.Url.Host;
我的URL是
localhost:5858
,但它只返回
localhost

现在,我正在本地主机中使用我的项目。我想得到localhost:5858

例如,当我使用这个域时

www.somedomainname.com
我想获得
somedomainname.com


请告诉我如何获取当前域名。

尝试获取url的“左侧”,如下所示:

string domainName = HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority);
这将为您提供
http://localhost:5858
https://www.somedomainname.com
无论您是在本地还是在生产。如果要删除
www
部分,应该配置IIS,但这是另一个主题


请注意,生成的URL不会有尾随斜杠。

您可以尝试以下代码:

 Request.Url.Host +
    (Request.Url.IsDefaultPort ? "" : ":" + Request.Url.Port)

HttpContext.Current.Request.Url.Host正在返回正确的值。如果您在www.somedomainname.com上运行它,它将为您提供www.somedomainname.com。如果你想得到5858以及你需要使用

HttpContext.Current.Request.Url.Port 

使用
Request.Url.Host
是合适的-这是您检索HTTP
Host:
头的值的方式,它指定UA(浏览器)想要的主机名(域名),因为HTTP请求的资源路径部分不包括主机名

请注意,
localhost:5858
不是域名,它是一个端点说明符,也称为“授权”,其中包括主机名和TCP端口号。这是通过访问
Request.Uri.Authority
检索的

此外,从
www.somedomain.com
获取
somedomain.com
是无效的,因为与
somedomain.com
相比,可以将Web服务器配置为为为
www.somedomain.com
提供不同的站点,但是如果您确定这在您的情况下有效,则需要手动解析主机名,尽管使用
String.Split('.')
在紧要关头起作用


请注意,web服务器(IIS)配置不同于ASP.NET的配置,而且ASP.NET实际上完全不知道其运行的网站和web应用程序的HTTP绑定配置。IIS和ASP.NET共享相同的配置文件(
web.config
)这一事实令人费解。

www.somedomain.com
是域/主机。子域是一个重要的部分
www.
经常与没有代码互换使用,但这必须作为规则设置(即使默认设置),因为它们不是等价的。想想另一个子域,比如
mx.
。这可能与
www.
的目标不同

鉴于此,我建议不要做这种事。也就是说,既然你这么问,我想你有很好的理由

就个人而言,我建议使用特殊的外壳
www.

string host = HttpContext.Current.Request.Url.GetComponents(UriComponents.HostAndPort, UriFormat.Unescaped);;

if (host.StartsWith("www."))
    return host.Substring(4);
else
    return host;
否则,如果您真的100%确定要切掉任何子域,您将需要更复杂的东西

string host = ...;

int lastDot = host.LastIndexOf('.');

int secondToLastDot = host.Substring(0, lastDot).LastIndexOf('.');

if (secondToLastDot > -1)
    return host.Substring(secondToLastDot + 1);
else
    return host;

获取端口就像其他人所说的。

请求。ServerVariables对象适合我。我不知道有什么理由不使用它


ServerVariables[“SERVER\u NAME”]
ServerVariables[“HTTP\u URL”]
应该可以得到您想要的内容

这里是
Request.RequestUri
及其所有属性的屏幕截图,供大家参考


您可以尝试以下代码以获得完全限定的域名:

Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host

这里有一个快速简单的方法来获取url的名称

            var urlHost = HttpContext.Current.Request.Url.Host;

            var xUrlHost = urlHost.Split('.');
            foreach(var thing in xUrlHost)
            {
                if(thing != "www" && thing != "com")
                {
                    urlHost = thing;
                }
            }
试试这个:


@Request.Url.GetLeftPart(UriPartial.Authority)

以获取MVC中的基本Url,即使是子域
www.somedomain.com/subdomain

var url = $"{Request.Url.GetLeftPart(UriPartial.Authority)}{Url.Content("~/")}";

我在asp.net core 3.1中这样使用它

 var url =Request.Scheme+"://"+ Request.Host.Value;

主机名和域名是两个不同的东西。你想要一个映射到你的特定IP地址或运行它的机器的主机名的域吗?var base_url=“@Request.url.GetLeftPart(UriPartial.Authority)@url.Content(“~/”)的可能重复项在我看来这应该是最好的答案。这非常适合我的需要。然而,有一个小小的修正:当请求授权部分时,返回的字符串将不包括尾随路径分隔符。因此:
http://localhost:60333
var base\u url=“@Request.url.GetLeftPart(UriPartial.Authority)@url.Content(“~/””)这在Asp.Net Core 2.2上似乎不起作用。我得到的“HttpContext”不包含“Current”的定义,并且找不到可访问的扩展方法“Current”,它接受类型为“HttpContext”的第一个参数(是否缺少using指令或程序集引用?)。@Stian显然已经有另一篇文章回答了这个问题:。这个答案只关注URI部分。虽然这个代码片段可以解决这个问题,但确实有助于提高文章的质量。请记住,您将在将来为读者回答这个问题,而这些人可能不知道您的代码建议的原因。这个答案没有详细说明为什么这样做,事实上,它与现有的一个答案是相同的。