Server.MapPath 在 ASP.NET MVC 中使用查询字符串
Server.MapPath with query string in ASP.NET MVC
经过大约 15 分钟的 Goooooogling,我找不到解决这个简单问题的方法。有什么帮助吗?
该应用程序托管在网站的 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
拼接[的结果=22=] 和查询字符串。
有更简单的方法吗?
我发现我用错了API,它实际上扩展到我服务器上的真实文件路径!
这就是我想要做的:
我有一堆相对 uris,我想在 Razor 页面中编写一个函数将它们扩展为绝对 uris。
@{
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 />
但是上面的none得到了正确的绝对路径
第一个展开为http://myserver/Route/Hello/129?name=kennyzx,
第二个扩展为http://myserver/web/myapplication/~/Route/Hello/129?name=kennyzx
第三个抛出异常,这就是我问这个问题的原因。
Server.MapPath
returns 服务器上的实际路径,如 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 />
经过大约 15 分钟的 Goooooogling,我找不到解决这个简单问题的方法。有什么帮助吗?
该应用程序托管在网站的 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
拼接[的结果=22=] 和查询字符串。
有更简单的方法吗?
我发现我用错了API,它实际上扩展到我服务器上的真实文件路径!
这就是我想要做的:
我有一堆相对 uris,我想在 Razor 页面中编写一个函数将它们扩展为绝对 uris。
@{
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 />
但是上面的none得到了正确的绝对路径
第一个展开为http://myserver/Route/Hello/129?name=kennyzx,
第二个扩展为http://myserver/web/myapplication/~/Route/Hello/129?name=kennyzx
第三个抛出异常,这就是我问这个问题的原因。
Server.MapPath
returns 服务器上的实际路径,如 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 />