我想在成功登录后重定向到以下 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#已经有很长一段时间了,也许框架改变了我不知道......
我只想在登录后将用户重定向到剃须刀页面
确保在program.cs中添加以下路由代码
builder.Services.AddRazorPages();
...
app.MapRazorPages();
然后尝试:
return Redirect("https://localhost:7090/Pagename");//use your port
可以在razor page.cshtml.cs处设置断点,看是否执行该方法。