在应用程序中获取页面完整URL?

时间:2012-10-23 21:34:08

标签: c# asp.net .net vb.net

要求是获取页面网址,基本上我需要获取页面所在目录的完整URL。

如果是www.domain.com/page.aspx,我需要www.domain.com/,如果是www.domain.com/TestApplication1/Page.aspx,我需要www.domain.com/TestApplication1/

为此我试过了:

Request.Url.DnsSafeHost.ToString()

我之前使用的另一个代码是构建完整的URL:

Dim currenturl = HttpContext.Current.Request.Url
Dim url = String.Format("{0}://{1}{2}", currenturl.Scheme, currenturl.Host, VirtualPathUtility.ToAbsolute("~" + Response.RedirectLocation))

但是有一个问题,如果页面在应用程序中,它们就不能正常工作。

例如,它们适用于www.domain.com/Page.aspx但如果页面地址为www.domain.com/TestApplication1/Page.aspx

,则无法正常工作

首先需要www.domain.com/,第二个例子是www.domain.com/TestApplication1 /

请指导如何实现这一目标。

由于

6 个答案:

答案 0 :(得分:1)

为什么不从字符串中找到的最后一个/符号中获取URL并对其进行子串?

答案 1 :(得分:1)

我假设您正在从当前正在执行的Web应用程序的上下文中运行此代码。如果是这种情况,那么这应该可以解决问题:

var pageSegments = Request.CurrentExecutionFilePath.Split('/');

var pageFolder = "/" + string.Join("/", pageSegments.Take(pageSegments.Length - 1)) + "/";

所以给出了

的网址
/Test/SomeFolder/Test.aspx

你应该回来

/Test/SomeFolder/

答案 2 :(得分:0)

Uri uri = new Uri(Request.Url.ToString());
string[] segments = uri.Segments;
string result = string.Format("{0}://{1}",uri.Scheme, uri.Host);
segments.ToList().ForEach(s =>
                             {
                                if(s!= segments[segments.Length-1])
                                     result += s;
                             });

您将找到分配给变量result的预期结果。

答案 3 :(得分:0)

试试这个:

    Dim pos As Integer = Request.Url.AbsoluteUri.LastIndexOf("/")
    Dim url As String = Request.Url.AbsoluteUri.Substring(0, pos + 1)

答案 4 :(得分:0)

查看HttpRequest.ServerVariables Property以访问IIS Server Variables。您可以利用它来实现您想要做的事情:

string output = string.Empty;

    string httpHost = Request.ServerVariables["HTTP_HOST"];
    string url = Request.ServerVariables["URL"];

    string[] splitUrl = url.Split('/');

    for (int i = 0; i < splitUrl.Length -1; i++)
    {
        if (splitUrl[i].Length > 0)
        {
            output += string.Format("/{0}", splitUrl[i]);
        }
    }

    string ssl = "http://";

    if (Request.ServerVariables["HTTPS"] == "off")
    {
        ssl = "https://";
    }

    output = string.Format("{0}{1}{2}/", ssl, httpHost, output);

示例输出:

http://localhost:60454/WebSite1/Folder/

答案 5 :(得分:0)

使用此:

Public Function GetAppUrl() As String
   Dim uri As Uri = HttpContext.Current.Request.Url
   Dim baseUrl As String = uri.Scheme & "://" & uri.Authority
   If baseUrl.EndsWith("/") Then baseUrl = baseUrl.Substring(0, baseUrl.Length - 1)
   baseUrl &= HttpContext.Current.Request.ApplicationPath
   If Not baseUrl.EndsWith("/") Then baseUrl &= "/"
   Return baseUrl
End Function