Вот полная команда, которую я использовал:
Код: Выделить всё
dotnet aspnet-codegenerator blazor-identity -dbProvider sqlite -dc MyProject.Data.BlazorAuthContext -f
< /code>
Пожалуйста, смотрите этот ответ для полных реплицированных процедур, чтобы интегрировать это в мое существующее веб -приложение Blazor.MyProject/
|
├── Components/
| |
| └── Account/
| |
| ├── Pages/
| | |
| | ├-- ForgotPassword.razor
| | |
| | ├-- Login.razor
| | |
| | ├-- Register.razor
| | |
| | ├-- ResendEmailConfirmation.razor
| | |
| | └-- Other files...
| |
| └── Shared/
| |
| ├-- AccountLayout.razor
| |
| ├-- RedirectToLogin.razor
| |
| └-- Other files...
< /code>
Эти конкретные файлы Razor < /code> извлечены и использовали в качестве ссылки для извлечения и создания нового макета.MyProject/
|
├── Components/
| |
| └── External/
| |
| ├── Pages/
| | |
| | ├-- ForgotPassword.razor
| | |
| | ├-- Login.razor
| | |
| | ├-- Register.razor
| | |
| | └-- ResendEmailConfirmation.razor
| |
| ├── Shared/
| | |
| | ├-- ExternalLayout.razor
| | |
| | └-- RedirectToLogin.razor
| |
| └── _Imports.razor
< /code>
Я использовал ту же структуру кода AccountLayout.razorКод: Выделить всё
ExternalLayout.razorКод: Выделить всё
AccountLayout.razorКод: Выделить всё
AccountLayout.razorКод: Выделить всё
@inherits LayoutComponentBase
@inject NavigationManager NavigationManager
@if (HttpContext is null)
{
Loading...
}
else
{
@Body
}
@code {
[CascadingParameter]
private HttpContext? HttpContext { get; set; }
protected override void OnParametersSet()
{
if (HttpContext is null)
{
// If this code runs, we're currently rendering in interactive mode, so there is no HttpContext.
// The identity pages need to set cookies, so they require an HttpContext. To achieve this we
// must transition back from interactive mode to a server-rendered page.
NavigationManager.Refresh(forceReload: true);
}
}
}
предупреждение
Не добавляйте Razor @layout Директиву в root _imports.razor , которые результаты в упущенных. Чтобы управлять макетом приложения по умолчанию, укажите макет в компоненте маршрутизатора. Для получения дополнительной информации см. В следующем примените макет по умолчанию в раздел приложения. Бесконечный цикл применения макета происходит, потому что директива @layout также применяется к компоненту макета. Чтобы избежать проблем рекурсии, мы рекомендуем хранить компоненты макета в их собственной папке (например, макеты ), вдали от того, где _imports.razor применяют файлы. is: < /p>Код: Выделить всё
@using System.Net.Http
@using System.Net.Http.Json
@using Microsoft.AspNetCore.Components.Forms
@using Microsoft.AspNetCore.Components.Authorization
@using Microsoft.AspNetCore.Components.Routing
@using Microsoft.AspNetCore.Components.Web
@using static Microsoft.AspNetCore.Components.Web.RenderMode
@using Microsoft.AspNetCore.Components.Web.Virtualization
@using Microsoft.JSInterop
@using MyProject
@using MyProject.Components
Код: Выделить всё
@using MyProject.Components.Account.Shared
@using MyProject.Components.External.Shared
@layout ExternalLayout
< /code>
Обратите внимание, что @using myproject.components.account.shared < /code> допускает доступ к другим файлам бритвы, которые я оставил там (после генерации этих шаблонных файлов). < /p>
Более того, в Routes.razor < />, Refactored the Nirrinal Necipurations, premover: pre: premover: premover. class = "lang-cs prettyprint-override">@using MyProject.Components.Account.Shared
< /code>
into: < /p>
@using MyProject.Components.External.Shared
Как изменить макет по умолчанию в Blazor, как только он устанавливает в app.razor? < /Li>
< /ul>
В дополнение, Preirecttologin.Razor < /> < /p> < /p> < /p> < /p>. class = "lang-cs prettyprint-override">
Код: Выделить всё
@inject NavigationManager NavigationManager
@code {
protected override void OnInitialized()
{
NavigationManager.NavigateTo($"Account/Login?returnUrl={Uri.EscapeDataString(NavigationManager.Uri)}", forceLoad: true);
}
}
< /code>
Я сохранил часть исходной структуры кода, сгенерированной опциями идентификации Blazor. Я только изменил некоторые конфигурации для достижения своей цели: иметь страницу входа в систему без побочного меню. После успешного входа в систему я буду отобразить боковое меню и основной контент, которые предоставляются шаблоном из этого учебника Blazor.
Поскольку я в настоящее время разрабатываю это веб -приложение Blazor, я определил «Запуск»: «Account/Login» К сожалению, с вышеупомянутыми процедурами страница входа загружается в бесконечном цикле. /> Страница для входа в Blazor 8 освежает в цикле < /li>
< /ul>
отличается от моего случая. < /p>
Externallayout.razor макет. Удивительно, но он разрешил загрузку страницы входа в бесконечный цикл, но я получил макет, который я пытался изменить:
a ae aever.merarher herearher и piefer herearchy и pilearar Не повлияет на ожидаемый результат программы, я проверил различные функции и функции в рамках страницы Login.razor . Они работали, как и ожидалось. Мой инстинкт предполагает, что проблема заключается исключительно при определении нового макета как DefaultLayout . Это, вероятно, вводит бесконечный цикл на странице входа в систему из -за экземпляров аутентификации в рамках программы, происхождение которого я не смог определить. /> любая справка будет высоко ценится!
Подробнее здесь: https://stackoverflow.com/questions/797 ... then-embed
Мобильная версия