当前位置:  开发笔记 > 后端 > 正文

ASP.NET中获取当前域的最佳方法是什么?

如何解决《ASP.NET中获取当前域的最佳方法是什么?》经验,为你挑选了5个好方法。

我想知道在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上,它应该可以正常工作.



1> Carlos Muñoz..:

与MattMitchell相同的答案,但有一些修改.这会检查默认端口.

编辑:更新语法并按Request.Url.Authority建议使用

$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"


您可以使用`Request.Url.Authority`作为Korayem建议而不是`Request.Url.Host`和`Request.Url.Port`.
您应该使用System.UriBuilder类,而不是连接字符串.
是否有一个字段定义为.NET,我可以使用而不是":"?像System.Uri.PortDelimiter这样的东西?你知道,只是为了保持一致性.:)
@MattMitchell,似乎没有与Authority建立问题,它相当于Host +":"+ Port,参见源代码http://www.dotnetframework.org/default.aspx/DotNET/DotNET/8@0/ untmp /惠德比/ REDBITS/NDP/FX/SRC /净/系统/ URI @ CS/9/URI @ CS
不是我所知道的,Jan Aagaard,但你总是可以在当地制作一个.我为大多数"魔术"字符串和数字做到了这一点.就此而言,你会在Carlos的回答中使用string.Empty而不是"";)

2> Matt Mitchel..:

根据这个链接,一个很好的起点是:

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中的内容.



3> 小智..:
Request.Url.GetLeftPart(UriPartial.Authority)

这是包含计划.


当他们提出这个名字时,我很乐意参加会议

4> Thirlan..:

警告!对于使用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

这个错误迫使我在配置文件中将我的域名主机作为字符串插入.



5> Korayem..:

为什么不用

Request.Url.Authority

它返回整个域和端口.

您仍然需要计算http或https


这也可以。要“显示” http或https,请在simlpy之前加上“ //”。因此,例如,它将显示为href =“ // @ Request.Url.Authority ...”
推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有