首页 > 解决方案 > 从 _Layout.cshtml 重定向到另一个页面

问题描述

如何在 asp.net core razor 中重定向到 _layout.cshtm 页面中的另一个页面。

我正在进行验证并且用户已登录,如果没有,它将被重定向到另一个页面。

@using Microsoft.AspNetCore.Identity
@using CronoParque.Model
@inject SignInManager<ApplicationUser> SignInManager
@inject UserManager<ApplicationUser> UserManager

@if (SignInManager.IsSignedIn(User))
{
    <form asp-controller="Account" asp-action="Logout" method="post" id="logoutForm" class="navbar-right">
        <ul class="nav navbar-nav navbar-right">
            <li>
                <a asp-page="/Account/Manage/Index" title="Manage">Ola @UserManager.GetUserName(User)!</a>
            </li>
            <li>
                <button type="submit" class="btn btn-link navbar-btn navbar-link">Sair</button>
            </li>
        </ul>
    </form>
}
else
{
    // targeting here
}

标签: asp.net-mvcasp.net-coreasp.net-core-2.0razor-pages

解决方案


回答

@if (SignInManager.IsSignedIn(User))
{
    // normal stuff
} 
else if (!Context.Request.Path.ToString().Contains("/About")) 
{
    // If we aren't processing a request for the target page, 
    // then redirect to it.
    Context.Response.Redirect("/About");
}

也许一个更好的答案

您的问题的用例可能是将未经授权的请求重定向到登录页面。在这种情况下,请使用内置的 razor pages 授权 API。

services
    .AddMvc()
    .AddRazorPagesOptions(options => {
        options.Conventions.AuthorizePage("/Contact");
    });

上面的代码进入Startup>ConfigureServices方法。

在上面的示例中,API 将未经授权的请求重定向到/Contact.

另请参阅:https ://docs.microsoft.com/en-us/aspnet/core/security/authorization/razor-pages-authorization?view=aspnetcore-2.1#require-authorization-to-access-a-page


推荐阅读