2015-03-24 2 views
0

Так что мне интересно, что такое pro's & минусы различных способов передачи данных между страницами вашего проекта.Pro's & cons для передачи данных в проекте в asp.net MVC

Я знаю:

  1. Sessions: Я не могу использовать это, потому что мой проект должен быть развернут на что-то вроде Azure, сеансы не хорошо для развертывания нескольких серверов.
  2. Передача параметров между различными действиями: Это работает хорошо, но это может быть очень утомительно для этого ...
  3. Cookies: Я планировал использовать это для своего проекта, но я прочитал, что это не лучшая практика?

Так что мне интересно, какую технику вы используете (и почему), поэтому я могу принять решение о том, какую технику я буду использовать.

Например: мой пользователь вошел в систему и для нескольких ActionResults Мне нужен UserId для доступа к userRepository, что лучший способ сделать это. Или, может быть, есть даже хороший способ удержать пользователя в качестве объекта (тогда мне не нужно было бы каждый день использовать db)? Я создал систему входа в систему и ее работоспособность, но не где-то где-то хранится пользователь? Или сохраняются только некоторые данные пользователя? Я использую это, например:

FormsAuthentication.SetAuthCookie(user.Email, false); 

Заранее спасибо!

+0

Вы может использовать состояние сеанса в Windows Azure, но поскольку это вне процесса, это означает, что все объекты состояния сеанса должны быть сериализованы. – Dai

+0

Кроме того, о каких данных мы говорим?Вы должны использовать каждый из предложенных вами вариантов в зависимости от контекста, вы не можете заменить его другим, совершенно нецелесообразно использовать файлы cookie или параметры URI для больших объемов данных, например. – Dai

+0

Я говорю о простых переменных, таких как имена пользователей и т. Д. –

ответ

1

Передача имен пользователей вокруг звуков очень похожа на аутентификацию. Взгляните на членство в ASP https://msdn.microsoft.com/en-us/library/yh26yfzy(v=vs.140).aspx

В зависимости от ваших требований вы также можете посмотреть TempData, хотя это действительно полезно для перенаправления между действиями. Using Tempdata in ASP.NET MVC - Best practice

Edit - основано на том факте, который вы используете куки авторизации, вы должны рассмотреть MVC уполномочил атрибуты следующим https://msdn.microsoft.cohm/en-us/library/system.web.mvc.authorizeattribute%28v=vs.118%29.aspx

Или еще один хороший подход заключается в использовании базового класса контроллера, который обрабатывает ваше разрешение

public BaseController: Controller 
{ 
     protected string username ; 

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

Да, TempData не подходит для того, что я имею в виду. Это членство, у меня уже есть система входа в систему, взгляните на строку кода, которую я добавил. –

+0

Тогда, я думаю, вы ответили на свой вопрос. Вы должны использовать файлы cookie для всех ваших разрешенных действий. –

+0

Таким образом, я могу использовать «User loggedInUser = AuthorizeAttribute.Users», чтобы получить текущего зарегистрированного пользователя? –

1

Сессия:
плюсов: красиво и легко
минусы: ест модуль памяти

Параметров:
плюсов: его путь форму «означает» работать
минусов: вы можете закончить прохождение много вещи вокруг или переделывания работы на сервере

Печенье:
плюсов: доступ от клиента и сервера
минусов: они имеют причуды , esp при работе с ними на стороне сервера и передаче их обратно. Эффективные глобальные переменные с проблемами блокировки

мой вызов: параметры. вы всегда можете иметь большой json blob

+0

В какой ситуации вы бы использовали json blob? –

+0

так скажите, что у вас есть страница, на которой у вас есть список выбранных элементов, вы можете редактировать их и т. Д., А затем сохранять их. вы могли бы иметь форму с несколькими полями, которые были названы. или вы можете создать объект json со всеми вашими данными в нем, который соответствует вашей модели просмотра для действия, и отправить обратно через ajax – Ewan

+0

имя пользователя, которое вы используете в качестве примера, не является хорошим примером. Вы должны создать токен аутентификации и передать его в заголовок или некоторые другие сумасшедшие вещи – Ewan

Смежные вопросы