我怎样才能得到网站的baseurl?
我想写一个小帮手方法,它返回该网站的基本url。 这就是我想到的:
public static string GetSiteUrl() { string url = string.Empty; HttpRequest request = HttpContext.Current.Request; if (request.IsSecureConnection) url = "https://"; else url = "http://"; url += request["HTTP_HOST"] + "/"; return url; }
这有没有什么错误,你可以想一想? 任何人都可以改进呢?
尝试这个:
string baseUrl = Request.Url.Scheme + "://" + Request.Url.Authority + Request.ApplicationPath.TrimEnd('/') + "/";
string baseUrl = Request.Url.GetLeftPart(UriPartial.Authority)
而已 ;)
GetLeftPart
是, Uri
的PCL版本不支持受欢迎的GetLeftPart
解决scheme。 然而, GetComponents
是如此,如果你需要可移植性,这应该做的伎俩:
uri.GetComponents( UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);
对我来说,@术士看起来是迄今为止最好的答案,但我以前一直使用这个。
string baseUrl = Request.Url.GetComponents( UriComponents.SchemeAndServer, UriFormat.UriEscaped)
或者在一个WebAPI控制器中;
string baseUrl = Url.Request.RequestUri.GetComponents( UriComponents.SchemeAndServer, UriFormat.Unescaped)
这是很方便的,所以你可以select你想要的转义格式。 我不清楚为什么有两个这样的不同的实现,并且据我所知,这种方法和@ GetLeftPart()
在这种情况下返回完全相同的结果,但它看起来像GetLeftPart()
也适用于非服务器Uri的mailto
标签。
我相信上面的答案不考虑网站何时不在网站的根目录。
这是一个WebApi控制器:
string baseUrl = (Url.Request.RequestUri.GetComponents( UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/') + HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;
我跟着去
HttpContext.Current.Request.ServerVariables["HTTP_HOST"]
根据Warlock写的内容,我发现如果你不在你网站的根目录下,那么就需要虚拟path根目录。 (这适用于MVC Web API控制器)
String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) + Configuration.VirtualPathRoot;
这对我有用。
Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
- Request.Url.OriginalString :返回与浏览器显示相同的完整path。
- Request.Url.PathAndQuery :返回(完整path) – (域名+ PORT)。
- Request.ApplicationPath :在宿主服务器上返回“/”,在本地IIS上部署“application name”。
所以,如果你想访问你的域名,请考虑在下列情况下包含应用程序名称:
- IIS部署
- 如果您的应用程序部署在子域。
我使用Application_Start中的以下代码
String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);
这是一个更傻的certificate方法。
VirtualPathUtility.ToAbsolute("~/");
你可能会添加非端口80 / SSL的端口?
就像是:
if (HttpContext.Current.Request.ServerVariables["SERVER_PORT"] != null && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "80" && HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString() != "443") { port = String.Concat(":", HttpContext.Current.Request.ServerVariables["SERVER_PORT"].ToString()); }
并在最终结果中使用?