在 ASP.NET MVC 中成功登录后重定向到剃刀页面

问题描述 投票:0回答:1

我想在成功登录后重定向到以下 Razor 页面:

[Route("api/[controller]")]
[ApiController]
public class AdminController : Controller
{
    private readonly AppContext _context;

    public AdminController(AppContext context)
    {
        _context = context;
    }

    [HttpPost("adminLogin")]
    public IActionResult Login(LoginInfo login)
    {
        Admin adminInDb = _context.Admins.FirstOrDefault(admin => admin.Username == login.Username);

        if (adminInDb == null && HashGenerator.VerifyHash(adminInDb.Password, login.Password, adminInDb.Salt))
        {
            //return RedirectToPage("/pages/login.html");
            return Ok(CreateToken(adminInDb.Id, adminInDb.Username));
        }

        return Unauthorized();
    }

    /*
    [HttpPost("adminLogin")]
    public IActionResult Login(LoginInfo login)
    {
        Admin adminInDb = _context.Admins.FirstOrDefault(admin => admin.Username == login.Username);

        if (adminInDb != null && HashGenerator.VerifyHash(adminInDb.Password, login.Password, adminInDb.Salt))
        {
            return RedirectToPage("/admin");
            //return Ok(CreateToken(adminInDb.Id, adminInDb.Username));
        }

        return Unauthorized();
    }
    */

    [Authorize]
    [HttpGet]
    public IActionResult Index()
    {
        var users = _context.Users.ToList();
        return View(users);
    }

    private UserToken CreateToken(long userId, string username)
    {
        var expires = DateTime.UtcNow.AddDays(5);
        var tokenDescriptor = new SecurityTokenDescriptor
        {
            Subject = new ClaimsIdentity(new[]
            {
                new Claim(JwtRegisteredClaimNames.Sub, $"{userId}"),
                new Claim(JwtRegisteredClaimNames.UniqueName, username),
                new Claim(JwtRegisteredClaimNames.Jti, Guid.NewGuid().ToString())
            }),
            Expires = expires,
            Issuer = JwtConfiguration.ValidIssuer,
            Audience = JwtConfiguration.ValidAudience,
            SigningCredentials = new SigningCredentials(
                new SymmetricSecurityKey(
                    Encoding.UTF8.GetBytes(JwtConfiguration.IssuerSigningKey)),
                    SecurityAlgorithms.HmacSha256Signature)
        };
        var tokenHandler = new JwtSecurityTokenHandler();
        var token = tokenHandler.CreateToken(tokenDescriptor);
        var jwtToken = tokenHandler.WriteToken(token);

        return new UserToken { Username = username, ExpiresAt = expires, JWT = jwtToken };
    }
}

我的剃须刀

page.cshtml

@page "/admin"
@{
    <table>
        <thead>
            <tr>
                <th>Id</th>
                <th>Username</th>
                <!-- Fügen Sie weitere Spalten hinzu, je nach Ihren Anforderungen -->
            </tr>
        </thead>
        <tbody>
            @foreach (var user in Model.Users)
            {
                <tr>
                    <td>@user.Id</td>
                    <td>@user.Username</td>
                </tr>
            }
        </tbody>
    </table>
}

我不知道我是否必须在

page.cshtml.cs
中做点什么,但看起来还不错。我只想在登录后将用户重定向到 Razor 页面,该页面不在
wwwroot
中。

也许我必须在

program.cs
中添加一些东西,但我不知道。

我在这个基本页面上工作了 15 个小时,但找不到任何解决方案。距离上次使用C#已经有很长一段时间了,也许框架改变了我不知道......

c# asp.net-mvc redirect http-redirect
1个回答
0
投票

我只想在登录后将用户重定向到剃须刀页面

确保在program.cs中添加以下路由代码

builder.Services.AddRazorPages();
...
app.MapRazorPages();

然后尝试:

return Redirect("https://localhost:7090/Pagename");//use your port

可以在razor page.cshtml.cs处设置断点,看是否执行该方法。

© www.soinside.com 2019 - 2024. All rights reserved.