У меня есть ASP. NET Core 3.1 Razor Pages, которое позволяет пользователям входить и выходить из системы.
Для выхода из системы у меня есть следующий контроллер:
public sealed class AccountController : Controller
{
[Route("/Logout")]
public async Task<IActionResult> LogoutAsync()
{
await this.HttpContext.SignOutAsync(CookieAuthenticationDefaults.AuthenticationScheme);
return this.RedirectToPage(ApplicationConstants.IndexPage);
}
}
В _Layout.cshtml
файле у меня есть следующее:
<a class="nav-link" asp-controller="Account" asp-action="LogoutAsync"><i class="fa fa-sign-out fa-lg" aria-hidden="true"></i></a>
В _ViewImports.cshtml
файле, который находится в родительском каталоге _Layout.cshtml
, у меня есть следующее:
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
В Startup.cs
файле я добавил следующее:
public void ConfigureServices(IServiceCollection services)
{
// stuff
services.AddControllers();
services.AddRazorPages()
.AddRazorPagesOptions(options =>
{
options.Conventions.AuthorizePage("/Page1");
options.Conventions.AuthorizePage("/Page2");
});
// more stuff
}
public static void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
// stuff
app.UseAuthentication();
app.UseRouting();
app.UseAuthorization();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllers();
endpoints.MapRazorPages();
});
}
Кажется, Visual Studio доволен этой настройкой и распознает asp-controller
и asp-action
как ASP. NET Core Tag. Помощники.
Однако при запуске приложения ссылка отображается следующим образом (обратите внимание на пустое href
):
<a class="nav-link" href=""><i class="fa fa-sign-out fa-lg" aria-hidden="true"></i></a>
Чего мне не хватает?
Примечания:
- Я обновляю приложение с ASP. NET Core 2.2 до 3.1. Он работает с 2.2.
- Да, я искал переполнение стека, погуглил проблему и не нашел решения.