首页 > 解决方案 > 如何重定向到 Razor Pages 的父虚拟目录?

问题描述

我有一个 Web 应用程序,它由两部分组成,第一部分位于 IIS 虚拟目录MainFolder中,第二部分位于虚拟目录MainFolder/RazorFolder中。第二个应用程序是带有 Razor 页面的 .Net Core Web 应用程序。我有一个 pageMainFolder/Default.aspx和一个 page MainFolder/RazorFolder/MyRazorPage

当我去 from default.aspxtoMyRazorPage我使用

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 应用程序中走私(很遗憾)返回地址?

标签: c#asp.netasp.net-corewebformsasp.net-core-2.1

解决方案


似乎没有允许使用双点 (/..) 语法的方法。因此有必要获取绝对 URL,对其进行解析,删除不需要的部分并重新构建它。

允许完成任务的方法在Microsoft.AspNetCore.Http.Extensions nuget 中。

  1. 完整网址:Request..GetDisplayUrl()
  2. 解析它:UriHelper.FromAbsolute
  3. 再次构建处理后的 URLUriHelper.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"));

推荐阅读