0

一个要求是获取页面url,基本上我需要获取页面所在目录的完整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/

请指导如何实现这一点。

谢谢

4

6 回答 6

1

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

于 2012-10-23T21:42:09.743 回答
1

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

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

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

所以给定一个网址

/Test/SomeFolder/Test.aspx

你应该回来

/Test/SomeFolder/
于 2012-10-23T21:42:23.953 回答
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
于 2012-10-25T10:41:07.003 回答
0

查看HttpRequest.ServerVariables 属性以访问IIS 服务器变量。您可以利用它来实现您想要做的事情:

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/
于 2012-10-24T01:25:20.300 回答
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

于 2012-10-23T21:57:54.130 回答
0

尝试这个:

    Dim pos As Integer = Request.Url.AbsoluteUri.LastIndexOf("/")
    Dim url As String = Request.Url.AbsoluteUri.Substring(0, pos + 1)
于 2012-10-23T22:15:15.997 回答