【问题标题】:convert path into absolute url将路径转换为绝对网址
【发布时间】:2014-06-30 10:24:20
【问题描述】:

我有如下网址的一部分:

"employee/employeeDetail.aspx"

整个URL的基本路径是:

"example.com/siteName"

所需的输出应该是:

"http://www.example.com/siteName/employee/employeeDetail.aspx"

我尝试了以下方法:

page.ResolveClientUrl(@"/employee/employeeDetail.aspx");

但结果是

"/employee/employeeDetail.aspx"

而不是组合两个字符串,即

string baseURL = @"example.com/siteName";
string relativeURL = @"employee/employeeDetail.aspx";
string finalURL = baseURL + relativeURL;

还有其他更好的方法来形成 URL 吗?


我尝试在 baseURL 之前添加~

page.ResolveClientUrl(@"~/employee/employeeDetail.aspx");

但结果是

../employee/employeeDetail.aspx

【问题讨论】:

  • 你看过UriBuilder类吗?
  • @tjleigh:没必要。这适用于这种情况。 UriBuilder 将是矫枉过正。
  • 可能。不过,这是一种处理缺失/无关斜线的强大方法。 (OP 的代码会将 finalURL 设置为 example.com/siteNameemployee/employeeDetail.aspx

标签: c# asp.net url


【解决方案1】:

一般来说,最好查看传入的请求并从中构建...

var ub = new UriBuilder(Request.Url);
var someNewPath = HostingEnvironment.MapPath("~/app/relative/path");
ub.Path = someNewPath;
ub.Query = perhapsAQueryString;
var absoluteUri = ub.Uri;

...但有时当您使用负载均衡器时,事情可能会变得更加复杂,您必须查看负载均衡器添加的标头,例如X-REQUESTED-FOR

【讨论】:

    【解决方案2】:

    您需要通过在开头添加~ 来告诉方法您的url 是相对于应用程序根路径的:

    page.ResolveClientUrl(@"~/employee/employeeDetail.aspx");
    

    如果您不这样做,它将被解析为您的网络服务器根目录的绝对路径。

    【讨论】:

      【解决方案3】:

      你错过了'~' 符号

      波浪号 (~) 表示根。

      page.ResolveClientUrl(@"~/employee/employeeDetail.aspx");
      

      【讨论】:

        猜你喜欢
        • 2014-01-28
        • 2017-08-01
        • 2011-11-07
        • 2011-05-02
        相关资源
        最近更新 更多