Как перенаправить в родительский виртуальный каталог для Razor Pages? - PullRequest
0 голосов
/ 08 июня 2018

У меня есть веб-приложение, которое состоит из двух частей: первая находится в виртуальном каталоге IIS MainFolder, вторая - в виртуальном каталоге MainFolder/RazorFolder.Второе приложение - .Net Core Web Application с Razor Pages.У меня есть страница 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")

возвращает "/MainFolder/RazorFolder/Default.aspx"

Hopefull (см. ResolveUrl / ResolveClientUrl эквиваленты для Asp.Net Razor? )

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

возвращает "../default.aspx"

Поэтому мне нужно либо иметь возможность перенаправить в родительский виртуальный каталог, либо получить URL-адрес полной страницы для его анализа.Или я должен (с позором) переправить обратный адрес из приложения webforms?

1 Ответ

0 голосов
/ 21 июня 2018

Похоже, что нет метода, позволяющего использовать синтаксис с двойной точкой (/ ..).Поэтому необходимо получить абсолютный URL-адрес, разобрать его, удалить ненужную часть и построить ее заново.

Методы, позволяющие выполнить задачу, находятся в Microsoft.AspNetCore.Http.Extensions nuget.

  1. Полный URL: Request..GetDisplayUrl()
  2. Синтаксический анализ: UriHelper.FromAbsolute
  3. Создание заново обработанного 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"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...