我想知道在ASP.NET中获取当前域的最佳方法是什么?
例如:
http://www.domainname.com/subdir/应该产生http://www.domainname.com http://www.sub.domainname.com/subdir/应该产生http://sub.domainname.com
作为指南,我应该能够将"/Folder/Content/filename.html"(例如由ASP.NET MVC中的Url.RouteUrl()生成的)直接添加到URL上,它应该可以正常工作.
与MattMitchell相同的答案,但有一些修改.这会检查默认端口.
编辑:更新语法并按
Request.Url.Authority
建议使用
$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"
根据这个链接,一个很好的起点是:
Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host
但是,如果域名为http://www.domainname.com:500,则会失败.
像下面这样的东西很有可能解决这个问题:
int defaultPort = Request.IsSecureConnection ? 443 : 80; Request.Url.Scheme + System.Uri.SchemeDelimiter + Request.Url.Host + (Request.Url.Port != defaultPort ? ":" + Request.Url.Port : "");
但是,端口80和443将取决于配置.
因此,您应该使用上面CarlosMuñoz IsDefaultPort
的Accepted Answer中的内容.
Request.Url.GetLeftPart(UriPartial.Authority)
这是包含计划.
警告!对于使用Current.Request .Url.Host的任何人.了解您正在根据当前请求工作,并且当前请求不会始终与您的服务器一起使用,有时可能与其他服务器一起使用.
因此,如果你在Global.asax中的Application_BeginRequest()中使用它,那么99.9%的时间它会没问题,但0.1%你可能得到的不是你自己的服务器的主机名.
这是我不久前发现的一个很好的例子.我的服务器不时会打到http://proxyjudge1.proxyfire.net/fastenv.Application_BeginRequest()很乐意处理这个请求,所以如果你在发出请求时调用Request.Url.Host,你将获得proxyjudge1.proxyfire.net.你们中的一些人可能会认为"没有呃",但值得注意,因为这只是一个非常难以察觉的错误,因为它只发生了0.1%的时间:P
这个错误迫使我在配置文件中将我的域名主机作为字符串插入.
为什么不用
Request.Url.Authority
它返回整个域和端口.
您仍然需要计算http或https