我怎样才能得到网站的基本信息?

本文关键字:信息 网站 | 更新日期: 2023-09-27 18:08:45

我想写一个小助手方法,它返回网站的基本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)

不幸的是,Uri的PCL版本不支持流行的GetLeftPart解决方案。然而,GetComponents是,所以如果你需要可移植性,这应该做的技巧:

uri.GetComponents(
    UriComponents.SchemeAndServer | UriComponents.UserInfo, UriFormat.Unescaped);

这是一个更可靠的方法。

VirtualPathUtility.ToAbsolute("~/");

对我来说,@warlock似乎是目前为止最好的答案,但我过去一直使用这个;

string baseUrl = Request.Url.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.UriEscaped)   

或者在WebAPI控制器中;

string baseUrl = Url.Request.RequestUri.GetComponents(
    UriComponents.SchemeAndServer, UriFormat.Unescaped)

很方便,所以你可以选择你想要的转义格式。我不清楚为什么有两个这样不同的实现,据我所知,这个方法和@术士的返回完全相同的结果在这种情况下,但它看起来像GetLeftPart()也将适用于非服务器的Uri的mailto标签为例。

我相信上面的答案没有考虑到当网站不在根网站的时候。

这是一个for WebApi控制器:

string baseUrl = (Url.Request.RequestUri.GetComponents(
                    UriComponents.SchemeAndServer, UriFormat.Unescaped).TrimEnd('/') 
                 + HttpContext.Current.Request.ApplicationPath).TrimEnd('/') ;

我选

HttpContext.Current.Request.ServerVariables["HTTP_HOST"]

根据Warlock写的,我发现如果你不在你的网站的根目录上托管,那么虚拟路径root是需要的。(这适用于MVC Web API控制器)

String baseUrl = Request.RequestUri.GetLeftPart(UriPartial.Authority) 
+ Configuration.VirtualPathRoot;

我使用以下代码从Application_Start

String baseUrl = Path.GetDirectoryName(HttpContext.Current.Request.Url.OriginalString);

请使用以下代码                            

string.Format("{0}://{1}", Request.url.Scheme, Request.url.Host);

这对我很有用。

Request.Url.OriginalString.Replace(Request.Url.PathAndQuery, "") + Request.ApplicationPath;
  • Request.Url。:返回与浏览器显示的完整路径。
  • Request.Url。PathAndQuery:返回(完整路径)-(域名+端口)
  • 请求。ApplicationPath:在托管服务器上返回"/",在本地IIS部署上返回"应用程序名称"。

所以如果你想访问你的域名,一定要考虑在以下情况下包括应用程序名称:

  1. IIS部署
  2. 如果你的应用程序部署在子域上。

====================================

为dev.x.us/web

它返回这个强大的文本

您是否可以为非端口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());
            }

并在最终结果中使用它?