Проблема staic
Как вы уже описали, вы используете static .Хотя это помогает получить к нему доступ практически везде, но у него есть другое свойство: оно инициализируется только один раз, и значение, которое вы ему присваиваете, является значением, имеющимся во всех потоках.(Ну, на самом деле у этого есть немного больше нюансов, таких как кэширование на уровне процессора, но я пока считаю, что это выходит за рамки.)
На данный момент: вы должны рассмотреть это, как будто есть только 1 Security User
объект в памяти.Если вы дадите ему значение, оно будет таким во всех потоках.
public class HomeController: Controller {
//note! static: the `new` is called only once!
static SecurityUser = new SecurityUser();
protected override void Initialize(RequestContext requestContext)
{
//so SecurityUser is not a fresh object.
//setting values will be shared between all
//threads (since there is only one SecurityUser object in memory
//shared across all threads
SecurityUser.Ip = "127.0.0.2";
}
Трубопровод MVC
Как Википедия гласит:
В вычислениях,конвейер, также известный как конвейер данных, представляет собой набор элементов обработки данных, соединенных последовательно, где выход одного элемента является входом следующего.
В общем случае он описывает потокданных и действий, выполняемых при обработке запроса.
Везде есть статьи об этом, например: здесь и здесь .
MSDNИзображение объясняет это очень хорошо (и завершено), я добавил его ниже.
Если вы посмотрите на изображение, вы увидите AuthenticationFilters
, AuthorizationFilters
и ActionFilter
s.(См. Эту ссылку для получения дополнительной информации о них.)
Их цель - выполнить код, аутентификацию и т. Д. Для некоторых или всех вызванных ActionMethods.Используя их, вы можете изолировать свое поведение аутентификации (что является хорошей практикой ОО) и поддерживать ваш код в обслуживании.Идея в том, что вам нужно будет определить свою специальную функцию безопасности только один раз.
Вы можете использовать это для инициализации объекта с определенным интерфейсом, например: ISecurity
с некоторыми свойствами, такими как IP-адрес, имя пользователя, права администратора и т. Д. Объект может быть заполнен в фильтре действий и может бытьразрешается с помощью средства разрешения зависимостей в каждом вызове http.Работает как шарм.
источник изображения: msdn