无法't显示当前登录的用户'即使在登录到应用程序之后,也可以在Asp.NET Core Razor视图中



我正在为一个Asp.NET Core MVC应用程序使用Asp.NET Identity进行简单的注册、登录和注销用户帐户。一切都很好,但在我登录后,我想显示一个带有当前登录用户名的主页,但我无法做到。我尝试了其他问题中给出的各种方法,但都不起作用。

例如,我试过

var cName = this.User.FindFirstValue(ClaimTypes.Name);
return ("HomePage", cName);

我试过了,

var user = await userManager.GetUserAsync(User);
var name = user.Name;

这是我用来做这个操作的控制器类,

using System.Security.Claims;
using System.Threading.Tasks;
using Chillbook.Models;
using Chillbook.Models.ViewModel;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Mvc;
namespace Chillbook.Controllers
{
public class AccountController : Controller
{
private readonly UserManager<AppUser> userManager;
private readonly SignInManager<AppUser> signinManager;
public AccountController(UserManager<AppUser> man, SignInManager<AppUser> sign)
{
userManager = man;
signinManager = sign;
}
[HttpGet]
public ViewResult SignUp()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> SignUp(SignUp user)
{
if (ModelState.IsValid)
{
AppUser newUser = new AppUser
{
UserName = user.UserName,
Email = user.Email,
PhoneNumber = user.PhoneNumber,
Age = user.Age,
Sex = user.Sex,
City = user.City,
Education = user.Education,
Description = user.Description
};
//Creating the user
var result = await userManager.CreateAsync(newUser, user.Password);
if (result.Succeeded)
{
//getting the current user
var cName = this.User.FindFirstValue(ClaimTypes.Name);
//returning a razor view after sign in
return View("HomePage", cName);
}
foreach (IdentityError err in result.Errors)
{
ModelState.AddModelError("", err.Description);
}
}
return View();
}
[HttpGet]
public ViewResult Login()
{
return View();
}
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<ActionResult> Login(Login user)
{
if (!ModelState.IsValid)
{
return View();
}
//signing in the user
var result = await signinManager.PasswordSignInAsync(user.UserName, user.Password, user.RememberMe, 
false);
if (result.Succeeded)
{
var cName = this.User.FindFirstValue(ClaimTypes.Name);
return View("HomePage", cName);
}
else
{
ModelState.AddModelError("", "Invalid UserName or Password");
return View();
}
}
public async Task<ActionResult> Logout()
{
//logging out the user
await signinManager.SignOutAsync();
return RedirectToAction("Index", "Home");
}
}
}

我的身份启动类部分,

ConfigureServices方法:

services.AddDbContext<ApplicationDbContext>(opts => opts.UseSqlServer(Configuration["ConnectionStrings:IdentityConnection"]));
services.AddIdentity<AppUser, IdentityRole>().AddEntityFrameworkStores<ApplicationDbContext>();

配置方式:

app.UseRouting();
app.UseAuthentication();
app.UseAuthorization();

使用MVC Core 3,您可以直接在Razor View 中执行以下操作

@using Microsoft.AspNetCore.Identity
@inject SignInManager<IdentityUser> SignInManager
@inject UserManager<IdentityUser> UserManager

显示已登录的用户

@UserManager.GetUserName(User)

相关内容

最新更新