Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/283.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取当前用户';控制器中的s数据';谁的构造函数?_C#_Asp.net Mvc_Asp.net Core Mvc_Asp.net Identity - Fatal编程技术网

C# 如何获取当前用户';控制器中的s数据';谁的构造函数?

C# 如何获取当前用户';控制器中的s数据';谁的构造函数?,c#,asp.net-mvc,asp.net-core-mvc,asp.net-identity,C#,Asp.net Mvc,Asp.net Core Mvc,Asp.net Identity,我需要在controller的构造函数中使用一些当前用户的数据来初始化存储库,但似乎不可能获取当前用户的数据,因为可以提供有关用户的任何数据(例如HttpContext或user)的所有对象在构造函数区域中都可以为空。如何在构造函数中获取所需数据,或以任何其他方式使用用户数据初始化存储库?为什么在构造函数中 有四种方法可以在MVC中获取当前用户的数据: 您可以为当前用户的数据创建会话(首选) 您可以将数据存储在本地存储器中 使用cookies。但这取决于用户浏览器中是否允许使用cookie MV

我需要在controller的构造函数中使用一些当前用户的数据来初始化存储库,但似乎不可能获取当前用户的数据,因为可以提供有关用户的任何数据(例如
HttpContext
user
)的所有对象在构造函数区域中都可以为空。如何在构造函数中获取所需数据,或以任何其他方式使用用户数据初始化存储库?

为什么在构造函数中

有四种方法可以在MVC中获取当前用户的数据:

  • 您可以为当前用户的数据创建会话(首选)
  • 您可以将数据存储在本地存储器中
  • 使用cookies。但这取决于用户浏览器中是否允许使用cookie
  • MVC提供了ViewBag。您可以使用它来传递数据
    您可以使用
    IHttpContextAccessor
    在构造函数中访问
    HttpContext

    public class HomeController : Controller
    {
        public HomeController(IHttpContextAccessor httpContextAccessor)
        {
            var httpContext = httpContextAccessor.HttpContext;
        }
    }
    
    如果您在startup类的configure方法中使用ASP.NET Core 1.x register
    IHttpContextAccessor
    ,对于ASP.NET Core 2.0,我认为这不是必需的

    services.TryAddSingleton<IHttpContextAccessor, HttpContextAccessor>();
    
    services.TryAddSingleton();
    
    为什么在构造函数中需要它?您不需要在构造函数中初始化存储库,您可以在操作中进行初始化。连接到数据库不需要知道用户,只需要id将其作为参数传递给查询。这是asp.net 5还是asp.net core?@Panagiotis Kanavos 1。问题是,web应用程序已经编写好了,我只是尝试改进它。例如,其中一个控制器可能有100多个actions,在每个方法中创建所有17个存储库是困难的,而且是不正确的。2.但是,即使ID在构造函数中也不可用(如果我弄错了,请告诉我在哪里)。@jao asp.net core 1.1,但正如我所记得的,同样的问题(用户数据不可用)也存在于clasical asp.net mvc中(至少在第4个版本中),那么您就有设计问题,并且误解了控制器和存储库的内容。。构造控制器时调用构造函数。它还没有成为管道的一部分。不正确的做法是在没有使用请求的情况下尝试获取请求数据。具有100个动作的控制器不是。它是50-100个控制器放入一个源文件中。我不建议将用户数据放入cookie中。听起来不安全。是的,我也是。但我只展示了传递用户数据的方法@在会话中放置一些数据,当登录时-这可以是一个解决方案。谢谢你的忠告