专业&缺点是在asp.net MVC的项目中传递数据

时间:2015-03-24 22:33:22

标签: c# asp.net-mvc parameter-passing

所以我想知道,亲和的是什么?在项目中的页面之间传递数据的各种方法的缺点。

我知道:

  1. 会话:我不能使用它,因为我的项目需要部署在像Azure这样的东西上,会话不适合多服务器部署。
  2. 在各种行动结果之间传递参数:这很好用,但这样做可能非常繁琐......
  3. Cookies:我打算在我的项目中使用它,但我读过这不是最好的做法?
  4. 所以我想知道你们正在使用什么技术(以及为什么),所以我可以决定使用什么技术。

    例如:我的用户已登录,对于多个ActionResults,我需要UserId来访问userRepository,这是最好的方法。或者甚至有一种很好的方法可以将用户作为一个对象(然后我不必一直访问数据库)?我已经设置了一个登录系统,它的工作正常,但用户是否存放在某个地方?或者仅存储用户的一些数据?我正在使用它,例如:

    FormsAuthentication.SetAuthCookie(user.Email, false);
    

    提前致谢!

2 个答案:

答案 0 :(得分:1)

会话:
专业人士:好的,容易的 缺点:吃记忆

参数:
专业人士:形式是“意味着”工作的方式 缺点:你最终可能会在服务器上传递大量内容或重做工作

饼干:
专业人士:从客户端和服务器访问
缺点:他们有怪癖,尤其是当他们处理服务器端并将其传回时。有锁定问题的有效全局变量

我的电话:参数。你总能有一个大的json blob

答案 1 :(得分:1)

传递用户名听起来很像身份验证。看看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

或者另一个好方法是使用处理授权的Base控制器类

 public BaseController: Controller
 {
       protected string username ;

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