Отображение пользовательских данных в ASP.NET core MVC - PullRequest
0 голосов
/ 24 июня 2018

Попытка отобразить аутентифицированные пользовательские данные в виде MVC.Использование ASP.NET Core 2.1

Произошла следующая ошибка:

Произошло необработанное исключение при обработке запроса.NullReferenceException: ссылка на объект не установлена ​​на экземпляр объекта.AspNetCore.Views_Home_Index.ExecuteAsync () в Index.cshtml, строка 6

Кажется, проблема с использованием @Model.id.Как правильно получить доступ к свойствам аутентифицированного пользователя из представления?

Models / LoginModel.cs

using Microsoft.AspNetCore.Identity;

namespace MyProject.Models
{
    public class LoginModel
    {
        [Required]
        [UIHint("email")]
        public string Email { get; set; }

        [Required]
        [UIHint("password")]
        public string Password { get; set; }
    }
}

Views / Account /Login.cshtml

@model LoginModel

<h1>Login</h1>

<div class="text-danger" asp-validation-summary="All"></div>

<form asp-controller="Account" asp-action="Login" method="post">
    <input type="hidden" name="returnUrl" value="@ViewBag.returnUrl" />
    <div class="form-group">
        <label asp-for="Email"></label>
        <input asp-for="Email" class="form-control" />
    </div>
    <div class="form-group">
        <label asp-for="Password"></label>
        <input asp-for="Password" class="form-control" />
    </div>
    <button class="btn btn-primary" type="submit">Login</button>
</form>

Controllers / AccountController.cs

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<IActionResult> Login(LoginModel details, string returnUrl)
{
    ApplicationUser user = new ApplicationUser();
    if (ModelState.IsValid)
    {
        user = await userManager.FindByEmailAsync(details.Email);
        if (user != null)
        {
            await signInManager.SignOutAsync();
            Microsoft.AspNetCore.Identity.SignInResult result =
                    await signInManager.PasswordSignInAsync(
                        user, details.Password, false, false);
            if (result.Succeeded)
            {
                return Redirect(returnUrl ?? "/");
            }
        }
        ModelState.AddModelError(nameof(LoginModel.Email),
            "Invalid user or password");
    }
    return View(details);
}

Просмотры / Home / Index.cshtml

@model ApplicationUser
@if (User.Identity.IsAuthenticated)
{
    @Model.Id
}

1 Ответ

0 голосов
/ 25 июня 2018

Вы можете добавить UserManager в представление и получить тот же результат, не передавая модель в представление:

@using Microsoft.AspNetCore.Identity
@inject UserManager<ApplicationUser> UserManager

А потом делаешь:

@await UserManager.GetUserIdAsync(User)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...