C# 了解登录用户的最佳方式是什么?

C# 了解登录用户的最佳方式是什么?,c#,asp.net-core-mvc,entity-framework-core,C#,Asp.net Core Mvc,Entity Framework Core,你好,我有下一个设计问题: 在访问我的控制器之前,我有一个过滤器来检查身份验证和授权,因此为了这样做,我必须了解用户。直到一切都很完美,但当我想知道谁是日志用户,以便我可以做更多的事情时,问题就开始了。有什么想法吗 [AdministratorAuth(“DogController”)] 公共类DogController:ControllerBase { [HttpGet] 公共IAction GetDogsOfUser() { 返回Ok(dogLogic.GetDogsOfUser()

你好,我有下一个设计问题:

在访问我的控制器之前,我有一个过滤器来检查身份验证和授权,因此为了这样做,我必须了解用户。直到一切都很完美,但当我想知道谁是日志用户,以便我可以做更多的事情时,问题就开始了。有什么想法吗

[AdministratorAuth(“DogController”)]
公共类DogController:ControllerBase
{    
[HttpGet]
公共IAction GetDogsOfUser()
{
返回Ok(dogLogic.GetDogsOfUser());
}
}
公共类登录:属性,IActionFilter
{
公共静态Guid令牌{get;private set;}
public void OnActionExecuted(ActionExecutedContext上下文)
{
}
ActionExecuting(ActionExecutingContext上下文)上的公共void
{
字符串headerToken=context.HttpContext.Request.Headers[“Authorization”];
如果(headerToken为空)
{
context.Result=newcontentresult()
{
Content=“需要令牌”,
};
}否则
{
尝试
{
Guid令牌=Guid.Parse(headerToken);
验证令牌(令牌、上下文);
令牌=令牌;
}捕获(格式化异常)
{
context.Result=newcontentresult()
{
Content=“无效的令牌格式”,
};
}
}
}
私有无效验证令牌(Guid令牌、ActionExecutingContext上下文)
{
使用(var sessions=GetSessionLogic(上下文))
{
如果(!sessions.IsValidToken(令牌))
{
context.Result=newcontentresult()
{
Content=“无效令牌”,
};
}
}
}
私有ISessionLogic GetSessionLogic(ActionExecutingContext上下文)
{
var typeOfSessionsLogic=typeof(ISessionLogic);
将context.HttpContext.RequestServices.GetService(typeOfSessionsLogic)作为ISessionLogic返回;
}
}
公共类管理员权限:LoginAuth
{
私有只读字符串权限;
公共管理员权限(字符串权限)
{
this.permission=许可;
}
public void OnActionExecuted(ActionExecutedContext上下文)
{
}
ActionExecuting(ActionExecutingContext上下文)上的公共void
{
base.OnActionExecuting(上下文);
字符串headerToken=context.HttpContext.Request.Headers[“Authorization”];
Guid令牌=Guid.Parse(headerToken);
使用(var sessions=GetSessionLogic(上下文))
{
if(!sessions.HasLevel(令牌、权限))
{
context.Result=newcontentresult()
{
Content=“用户没有访问权限”+权限,
};   
}
}
}
私有ISessionLogic GetSessionLogic(ActionExecutingContext上下文)
{
var typeOfSessionsLogic=typeof(ISessionLogic);
将context.HttpContext.RequestServices.GetService(typeOfSessionsLogic)作为ISessionLogic返回;
}
}

让我们想象一下,如果我想知道用户的狗是谁,我该怎么做?

你可以简单地使用Nloglog4net函数

创建一个包含

Logged = DateTime.Now,
LoginHost = Request.Host.ToString(),
LoginIP = Request.HttpContext.Connection.LocalIpAddress.ToString(),
SessionId = Request.HttpContext.Session.Id

您能更具体地向我展示并帮助我如何为这个例子实现正确的解决方案吗?我想知道DogLogic类中的用户日志,因为我有@Daniel Acevedo的逻辑,它取决于您的身份验证,例如,如果您使用asp.net标识,您可以访问声明值,并且有许多关于用户日志的信息:HttpContextAccessor.HttpContext.user.claims,这取决于你的身份。我编辑问题以便你能看到。我理解你所说的,但我认为你在DogControllerIt中所说的并不完全正确,这取决于
AdministratorAuthAttribute
的实现。这看起来不像是一个标准的开箱即用的MVC属性。我编辑了这个问题,这样你就可以看到我的过滤类管理员Auth和我的登录名。当Identity为你做所有这些时,你为什么要做这些额外的工作?你的意思是什么?你上面写的内容已经在中实现了,请查看或授权。