ASP. NET Практическое руководство по глобальному методу CORE / Передовая практика - PullRequest
0 голосов
/ 28 мая 2020

Я новичок в ASP. NET Core framework (с использованием 3.1 btw) и на нескольких моих страницах (каждая страница наследует класс PageModel) у меня определен этот метод:

private string GetSignedInUser()
{
    var claimsIdentity = (ClaimsIdentity)User.Identity;
    var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);
    var theUser = claim.Value;
    return theUser;
}

Я считаю, что это плохая практика - дублировать этот метод на нескольких моих страницах. Всего страниц 11.

Мой вопрос - сделать этот метод глобальным (даже если это возможно) - создать отдельный класс (например, GetCurrentUser), а затем использовать внедрение зависимостей в «Startup. cs "чего-то вроде ...

services.AddScoped(GetCurrentUser)();

Правильно ли я понимаю здесь? Рекомендуется ли следовать этой практике в мире ASP. NET Core?

Спасибо за любые отзывы.

1 Ответ

2 голосов
/ 28 мая 2020

Один из способов - потенциально создать метод расширения. Вы бы не вводили этот класс через DI.

public static class UserExtensions
{
    public static string GetCurrentUserName(this User user)
    {
        var claimsIdentity = (ClaimsIdentity)user.Identity;

        var claim = claimsIdentity.FindFirst(ClaimTypes.NameIdentifier);

        return claim.Value;
    }
}

Его можно использовать как:

public async Task<IActionResult> DoSomething()
{
    //do other stuff;

    var currentUserName = User.GetCurrentUserName();

    //do other stuff;
}

...