c# - ASP.NET MVC 中带有查询字符串的 Server.MapPath
问题描述
在 Goooooogling 大约 15 分钟后,我找不到这个简单问题的解决方案。所以有点帮助?
该应用程序托管在web
网站的子文件夹中,我需要映射一个相对 Uri(这是一个将 int 和一个字符串作为参数的Hello
操作):RouteController
"~/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,它实际上扩展到了我服务器上的真实文件路径!
这就是我想要做的:
我有一堆相对 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 />
但以上都没有得到正确的绝对路径。
第一个扩展为http://myserver/Route/Hello/129?name=kennyzx,
第二个扩展为http://myserver/web/myapplication/~/Route/Hello/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 />
推荐阅读
- r - 对 R 中的多个数据集重复分析
- keycloak - 更改 Keycloak 注销重定向 url
- node.js - 如何使用用户 ID 查找喜欢的帖子
- c# - .Net 5 中的 ManualResetEvent
- python - IndexError:元组索引超出范围(np.shape,reshape)
- intellij-idea - 为什么在使用带有 FX 的 OpenJDK 的 Azul Zulu 构建将 JavaFX 项目升级到 JDK 17 后,IDEA 找不到 JavaFX 包?
- r - 简单但不容易的合并任务
- flutter - Flutter 三元条件为 null 而不是 bool 的子类型
- mysql - 如何从 mySQL 数据库中只获取一个对象?
- c# - 使用特定格式格式化日期