经过大约15分钟的谷歌搜索,我找不到这个简单问题的解决方案。那么一些小帮助?
该应用程序托管在网站的web
子文件夹中,我需要映射一个相对Uri(这是RouteController
中的Hello
操作,以int和字符串作为参数(:
"~/Route/Hello/129?name=kennyzx"
至
http://myserver/web/myapplication/Route/Hello/129?name=kennyzx
如果我使用
HttpContext.Current.Server.MapPath("~/Route/Hello/129?name=kennyzx");
它抛出一个异常,因为问号?
是一个非法字符。
因此,我需要首先将Uri分为两部分~/Route/Hello/129
和?name=kennyzx
,然后MapPath
取第一部分,Path.Combine
将MapPath
的结果和查询字符串连接起来。
有更简单的方法吗?
我意识到我使用了错误的API,它实际上扩展到了我的服务器上的真实文件路径
这就是我要做的:
我有一堆相对uri,我想写一个函数,在Razor页面中将它们扩展为绝对uri。
@{
ViewBag.Title = "Route Testing";
var link1 = "/Route/Hello/129?name=kennyzx";
var link2 = "~/Route/Hello/129?name=kennyzx";
}
@functions{
private static string GetAbsoluteUri(string link)
{
string absoluteUri = HttpContext.Current.Server.MapPath(link);
return absoluteUri;
}
}
<h2>Route Testing</h2>
<a href="@link1">@link1</a><br />
<a href="@link2">@link2</a><br />
<a href="@GetAbsoluteUri(@link2)">@link2</a><br />
但以上都没有得到正确的绝对路径。
第一个扩展到http://myserver/Route/Hello/129?name=kennyzx,
第二个扩展到http://myserver/web/myapplication/~/路线/你好/129?name=kennyzx
第三个例外,这就是为什么我要问这个问题。
Server.MapPath
返回服务器上的实际路径,如file:///C:/somefolder/somefile
。它不用于解析相对URL。
原来我要找的是@Url.Content来解析Razor页面中的相对Url。
@{
ViewBag.Title = "Route Testing";
var link1 = "~/Route/Hello/129?name=kennyzx";
}
<h2>Route Testing</h2>
<a href="@Url.Content(@link1)">@link1</a><br />