C# 如何在ASP.NET中获取当前域名
我想在asp.net c#中获取当前域名 我正在使用这个代码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的“左侧”,如下
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
是合适的-这是您检索HTTPHost:
头的值的方式,它指定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部分。虽然这个代码片段可以解决这个问题,但确实有助于提高文章的质量。请记住,您将在将来为读者回答这个问题,而这些人可能不知道您的代码建议的原因。这个答案没有详细说明为什么这样做,事实上,它与现有的一个答案是相同的。