如何重定向到 Razor Pages 的父虚拟目录?

How to redirect to parent virtual directory for Razor Pages?

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

当我从 default.aspxMyRazorPage 我使用

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")

returns "/MainFolder/RazorFolder/Default.aspx"

Hopefull(请参阅 ResolveUrl/ResolveClientUrl 等同于 Asp.Net Razor? )

@Href("../default.aspx")

returns "../default.aspx"

所以我要么需要能够重定向到父虚拟目录,要么获取整页 URL 来解析它。或者我应该(羞愧地)从 webforms 应用程序走私 return 地址?

似乎没有允许使用双点 (/..) 语法的方法。所以有必要获取absolute URL,解析它,去掉不要的部分,重新​​构建。

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

  1. 完整 URL: 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"));