【问题标题】:ASP.NET CORE Global Method How To/Best PracticeASP.NET CORE 全局方法操作方法/最佳实践
【发布时间】:2020-09-15 04:57:47
【问题描述】:

我是 ASP.NET Core 框架的新手(使用 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 世界中遵循的最佳实践吗?

感谢您的任何反馈。

【问题讨论】:

  • 为什么不使用继承并创建自己的基本控制器?
  • 谢谢!我实际上从未想过这样做。我忽略了这一点 - 一定是深深地埋在我的编码中。
  • 您还可以将其转换为 User 类的扩展方法,使其在页面模型以外的地方也可用。
  • @t.karalis - 当你说用户类时,你的意思是我建议创建一个类名“GetCurrentUser”还是别的什么?

标签: c# asp.net-core global


【解决方案1】:

一种方法是潜在地创建一个扩展方法。您将通过 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;
}

【讨论】:

  • @PED 如果答案对您有用,请随时接受;)
  • 感谢您输入如何执行此操作的模型。现在仔细看看它,我很清楚我该做什么。再次感谢@t.karalis。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-12
  • 2012-10-09
  • 2020-01-25
  • 2013-11-08
  • 1970-01-01
  • 1970-01-01
  • 2012-02-10
相关资源
最近更新 更多