在 asp.net MVC 的项目中传递数据的优缺点

Pro's & cons to pass data in a project in asp.net MVC

所以我想知道,在您项目的页面之间传递数据的各种方式的优缺点是什么。

我知道:

  1. 会话:我不能使用它,因为我的项目需要部署在 Azure 之类的东西上,会话不适合多服务器部署。
  2. 在各种 actionresult 之间传递参数:这很好用,但这样做可能会非常乏味...
  3. Cookies:我打算将其用于我的项目,但我了解到这不是最佳做法?

所以我想知道你们正在使用什么技术(以及为什么),所以我可以决定我将使用什么技术。

例如:我的用户已登录,对于几个 ActionResults,我需要 UserId 才能访问 userRepository,执行此操作的最佳方法是什么。或者甚至有一种将用户作为对象保存的好方法(这样我就不必一直访问数据库了)?我已经设置了一个登录系统并且它工作正常,但是用户没有存储在某个地方吗?或者只存储用户的一些数据?例如,我正在使用它:

FormsAuthentication.SetAuthCookie(user.Email, false);

提前致谢!

会话数:
优点 : 很好很简单
缺点:吃内存

参数:
优点:它的形式 'meant' 工作
缺点:您最终可能会传递很多东西或在服务器上重做工作

Cookies:
优点:从客户端和服务器访问
缺点:他们有怪癖,尤其是在与服务器端打交道并将它们传回时。具有锁定问题的有效全局变量

我的调用:参数。你总是可以有一个大 json blob

传递用户名听起来很像身份验证。看看 ASP 会员资格 https://msdn.microsoft.com/en-us/library/yh26yfzy(v=vs.140).aspx

根据您的要求,您还可以查看 TempData,尽管这仅对在操作之间重定向非常有用。 Using Tempdata in ASP.NET MVC - Best practice

编辑 - 基于您使用授权 cookie 的事实,您应该考虑 MVC 授权属性 https://msdn.microsoft.cohm/en-us/library/system.web.mvc.authorizeattribute%28v=vs.118%29.aspx

或者另一个好的方法是使用处理您的授权的基本控制器class

 public BaseController: Controller
 {
       protected string username ;

       protected override void OnActionExecuting(ActionExecutingContext filterContext)
    {
           // Do authorization here
          username = // code to get username 
   {
 }