假设我要在http://www.foobar.com上托管一个网站。
有没有一种方法可以通过编程方式在后面的代码中确定“ http://www.foobar.com/ ”(即无需在Web配置中对其进行硬编码)?
假设我要在http://www.foobar.com上托管一个网站。
有没有一种方法可以通过编程方式在后面的代码中确定“ http://www.foobar.com/ ”(即无需在Web配置中对其进行硬编码)?
Answers:
HttpContext.Current.Request.Url可以为您提供有关URL的所有信息。并且可以将网址分解为多个片段。
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority);
GetLeftPart方法返回一个字符串,其中包含URI字符串的最左侧部分,以part指定的部分结尾。
URI的方案和权限段。
对于仍然想知道的人,可以在http://devio.wordpress.com/2009/10/19/get-absolut-url-of-asp-net-application/中找到更完整的答案。
public string FullyQualifiedApplicationPath
{
get
{
//Return variable declaration
var appPath = string.Empty;
//Getting the current context of HTTP request
var context = HttpContext.Current;
//Checking the current context content
if (context != null)
{
//Formatting the fully qualified website url/name
appPath = string.Format("{0}://{1}{2}{3}",
context.Request.Url.Scheme,
context.Request.Url.Host,
context.Request.Url.Port == 80
? string.Empty
: ":" + context.Request.Url.Port,
context.Request.ApplicationPath);
}
if (!appPath.EndsWith("/"))
appPath += "/";
return appPath;
}
}
context.Request.Url.Port == 80
,请(context.Request.Url.Port == 80 && context.Request.Url.Scheme == "http") || (context.Request.Url.Port == 443 && context.Request.Url.Scheme == "https")
使用以下内容替换 或使用以下答案
如果示例网址为http://www.foobar.com/Page1
HttpContext.Current.Request.Url; //returns "http://www.foobar.com/Page1"
HttpContext.Current.Request.Url.Host; //returns "www.foobar.com"
HttpContext.Current.Request.Url.Scheme; //returns "http/https"
HttpContext.Current.Request.Url.GetLeftPart(UriPartial.Authority); //returns "http://www.foobar.com"
.Host
的"http://www.foobar.com/Page1"
是www.foobar.com
,没有foobar.com
。
要获取整个请求URL字符串:
HttpContext.Current.Request.Url
要获取请求的www.foo.com部分:
HttpContext.Current.Request.Url.Host
请注意,在某种程度上,您受制于ASP.NET应用程序之外的因素。如果将IIS配置为接受您的应用程序的多个主机头或任何主机头,则通过DNS解析到您的应用程序的那些域中的任何一个都可能显示为“请求网址”,具体取决于用户输入的域名。
Match match = Regex.Match(host, "([^.]+\\.[^.]{1,3}(\\.[^.]{1,3})?)$");
string domain = match.Groups[1].Success ? match.Groups[1].Value : null;
host.com =>返回host.com
s.host.com =>返回host.com
host.co.uk =>返回host.co.uk
www.host.co.uk =>返回host.co.uk
s1.www.host.co.uk =>返回host.co.uk
这也可以:
字符串url = HttpContext.Request.Url.Authority;
下面的C#示例:
string scheme = "http://";
string rootUrl = default(string);
if (Request.ServerVariables["HTTPS"].ToString().ToLower() == "on")
{
scheme = "https://";
}
rootUrl = scheme + Request.ServerVariables["SERVER_NAME"].ToString();
Request
对象。