Подтвердить что ты не робот

Указание сеанса только для чтения в ASP.NET MVC

Можно ли указать, что данный Контроллер или Действие использует состояние сеанса только для чтения? В "старом" ASP.NET мы делали что-то вроде этого:

<%@ Page EnableSessionState="ReadOnly" %>

Есть ли эквивалент ASP.NET MVC? Я хочу, чтобы мое приложение одновременно обслуживало несколько запросов от одного и того же клиента, и полностью отключить сеанс - это не вариант в моем случае.

4b9b3361

Ответ 1

Здесь был задан аналогичный вопрос: Отключить состояние сеанса по запросу в ASP.Net MVC

Принятый ответ касается создания настраиваемого обработчика маршрута, который в конечном итоге пропускает привязку к сеансу. Это точно не отвечает на ваш вопрос (как объявить несколько действий для использования доступа к readonly сеансу), но это было достаточно актуально, чтобы упомянуть.

Ответ 3

Это может быть немного сложно - я понимаю, что настройка состояния сеанса - это то, что произошло на уровне IHttpHandler. С помощью пользовательских обработчиков вы можете указать состояние сеанса с помощью интерфейсов маркеров, таких как IReadOnlySessionState, чтобы объявить, что для этого требуется только состояние только для чтения. Вы можете попробовать добавить это к своему контроллеру и посмотреть, как он летает. Я подозреваю, что это не произойдет, потому что контроллеры ASP.NET mvc произойдут после того, как IHttpHandler подключен, но это стоит того.

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

Ответ 4

Как насчет того, чтобы данные, которые вы хотите "читать только", как статические в вашей модели? Таким образом, вы можете иметь одновременные запросы к MVC с теми же данными.