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

时间:2020-03-05 18:53:08  来源:igfitidea点击:

我想知道获取当前域的最佳方法是在ASP.NET中吗?

例如:

http://www.domainname.com/subdir/应该产生http://www.domainname.com
http://www.sub.domainname.com/subdir/应该产生http://sub.domainname.com

作为指导,我应该能够直接在URL上添加一个类似" /Folder/Content/filename.html"的URL(例如,由ASP.NET MVC中的Url.RouteUrl()生成)。

解决方案

回答

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

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将取决于配置。

因此,我们应该像上面Carlos Mu?oz的"已接受答案"中那样使用" IsDefaultPort"。

回答

怎么样:

String domain = "http://" + Request.Url.Host

回答

怎么样:

NameValueCollection vars = HttpContext.Current.Request.ServerVariables;
string protocol = vars["SERVER_PORT_SECURE"] == "1" ? "https://" : "http://";
string domain = vars["SERVER_NAME"];
string port = vars["SERVER_PORT"];

回答

其他方式:

string domain;
Uri url = HttpContext.Current.Request.Url;
domain= url.AbsoluteUri.Replace(url.PathAndQuery, string.Empty);

回答

答案与MattMitchell相同,但作了一些修改。
而是检查默认端口。

Edit: Updated syntax and using Request.Url.Authority as suggested
$"{Request.Url.Scheme}{System.Uri.SchemeDelimiter}{Request.Url.Authority}"