如何重定向到 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.aspx
到 MyRazorPage
我使用
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中。
- 完整 URL:
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"));
我有一个 Web 应用程序,它由两部分组成,第一部分位于 IIS 虚拟目录 MainFolder
中,第二部分位于虚拟目录 MainFolder/RazorFolder
中。第二个应用程序是带有 Razor Pages 的 .Net Core Web 应用程序。我有一个页面 MainFolder/Default.aspx
和一个页面 MainFolder/RazorFolder/MyRazorPage
.
当我从 default.aspx
到 MyRazorPage
我使用
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中。
- 完整 URL:
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"));