c# - 如何重定向到 Razor Pages 的父虚拟目录?
问题描述
我有一个 Web 应用程序,它由两部分组成,第一部分位于 IIS 虚拟目录MainFolder
中,第二部分位于虚拟目录MainFolder/RazorFolder
中。第二个应用程序是带有 Razor 页面的 .Net Core Web 应用程序。我有一个 pageMainFolder/Default.aspx
和一个 page MainFolder/RazorFolder/MyRazorPage
。
当我去 from default.aspx
toMyRazorPage
我使用
Response.Redirect("RazorFolder/MyRazorPage")
然而我不知道怎么回去。唯一的工作方式是(在动作方法中)
return Redirect("http://localhost/MainFolder/Default.aspx");
这仅在我的测试环境中有效。
其他尝试:
return Redirect("~/Default.aspx");
重定向到http://localhost/MainFolder/RazorFolder/Default.aspx
Url.Content("~/Default.aspx")
返回"/MainFolder/RazorFolder/Default.aspx"
Hopefull(请参阅Asp.Net Razor 的 ResolveUrl/ResolveClientUrl 等效项? )
@Href("../default.aspx")
返回"../default.aspx"
所以我要么需要能够重定向到父虚拟目录,要么需要完整的页面 URL 来解析它。或者我应该从 webforms 应用程序中走私(很遗憾)返回地址?
解决方案
似乎没有允许使用双点 (/..) 语法的方法。因此有必要获取绝对 URL,对其进行解析,删除不需要的部分并重新构建它。
允许完成任务的方法在Microsoft.AspNetCore.Http.Extensions nuget 中。
- 完整网址:
Request..GetDisplayUrl()
- 解析它:
UriHelper.FromAbsolute
- 再次构建处理后的 URL
UriHelper.BuildAbsolute
所以完整的扩展方法(注意参数parentRelativeUri必须以'/'开头):
public static string GetParentUri(this HttpRequest request, string parentRelativeUri)
{
string scheme;
HostString host;
PathString path;
QueryString query;
FragmentString fragment;
UriHelper.FromAbsolute(request.GetDisplayUrl(), out scheme, out host, out path, out query, out fragment);
var pathBase = request.PathBase.ToString();
return UriHelper.BuildAbsolute(scheme, host,
pathBase.Substring(0, pathBase.LastIndexOf("/")),
parentRelativeUri);
}
最后重定向到父级是:
return Redirect(Request.GetParentUri("/Default.aspx"));
推荐阅读
- xcode - 升级到 Xcode 10 后找不到 iPhone 6 模拟器
- python - 如何检查 pandas.Dataframe 中的重复列?
- php - 在 PHP 中,如何将会话 ID 与 file_get_contents 函数一起传递?
- html - 即使启用了所有可访问性/键盘设置,带有 href 的锚点也不会在 Safari 中获得焦点
- python - 跨度标签之间的美丽汤提取文本
- makefile - 如何在 GNU make 中获取 makefile 的父目录的基本名称?
- elasticsearch - 在弹性搜索中忽略 TF-IDF
- python - 按行分组时如何合并熊猫数据框的字典
- mysql - 带有自己的 mysql 或全局 docker mysql 的 docker 容器
- python - opencv-ModuleNotFoundError:Spyder python 提示中没有名为“cv2”的模块