Отключите Состояние сеанса на запрос в ASP.NET MVC

Почему Вы хотите сделать это? Если это - так, чтобы другое приложение могло использовать его, Вы могли бы хотеть изучить перенаправление привязки сборки вместо этого.

46
задан Martin 15 January 2013 в 11:26
поделиться

4 ответа

Почему бы вам не реализовать для этого фильтр действий RouteHandler ?

Вот в чем дело - у IRouteHandler есть такой метод - GetHttpHandler . Когда вы делаете запрос ASP.Net MVC к контроллеру, по умолчанию механизм маршрутизации обрабатывает запрос, создавая новый экземпляр MvcRouteHandler , который возвращает MvcHandler . MvcHandler - это реализация IHttpHandler , отмеченная (сюрприз!) Интерфейсом IRequiresSessionState . Вот почему обычный запрос использует Session.

Если вы следите за моим сообщением в блоге о том, как реализовать собственный RouteHandler (вместо использования MvcRouteHandler) для обслуживания изображений, вы можете пропустить возврат с тегами сеанса IHttpHandler .

Это должно освободить IIS от навязывания вам синхронности. Также, вероятно, будет более производительно, потому что он пропускает все уровни кода MVC, работающие с фильтрами.

36
ответ дан 26 November 2019 в 20:13
поделиться

Попробуйте обслуживать изображения из другого домена. Например, images.mysite.com.

Это даст вам два преимущества: во-первых, сеансы отслеживаются с помощью файла cookie, поэтому у images.mysite.com этот файл cookie не будет. Во-вторых, он даст вам еще два одновременных запроса на получение изображений.

Думали ли вы о настройке HttpHandler для обслуживания ваших изображений?

mysite.com.

Это даст вам два преимущества: во-первых, сеансы отслеживаются файлом cookie, поэтому у images.mysite.com этот файл cookie не будет. Во-вторых, он даст вам еще два одновременных запроса на получение изображений.

Думали ли вы о настройке HttpHandler для обслуживания ваших изображений?

mysite.com.

Это даст вам два преимущества: во-первых, сеансы отслеживаются файлом cookie, поэтому у images.mysite.com этот файл cookie не будет. Во-вторых, он даст вам еще два одновременных запроса на получение изображений.

Думали ли вы о настройке HttpHandler для обслуживания ваших изображений?

6
ответ дан 26 November 2019 в 20:13
поделиться

На нашем сервере IIS даже не знает о сеансах - это стек ASP.NET, который обрабатывает один запрос за сеанс за раз. Статические файлы, такие как изображения, никогда не затрагиваются.

Возможно ли, что ваше приложение ASP.NET обслуживает файлы вместо IIS?

1
ответ дан 26 November 2019 в 20:13
поделиться

Измените DefaultCOntrollerFactory на собственный класс ControllerFactory. Контроллер по умолчанию.TempDataProvider использует SessionStateTempDataProvider. вы можете это изменить.

1. Установите web.config / system.web / sessionState: mode = "Off".

2. Создайте класс DictionaryTempDataProvider.

  public class DictionaryTempDataProvider : ITempDataProvider
  {
    public IDictionary<string, object> LoadTempData(ControllerContext controllerContext)
    {
      return new Dictionary<string, object>();
    }

    public void SaveTempData(ControllerContext controllerContext, IDictionary<string, object> values)
    {
    }
  }

3. Создайте DictionaryTempDataControllerFactory

  public class DictionaryTempDataControllerFactory : DefaultControllerFactory
  {
    public override IController CreateController(System.Web.Routing.RequestContext requestContext, string controllerName)
    {
      var controller = base.CreateController(requestContext, controllerName) as Controller;
      if (controller!=null)
        controller.TempDataProvider = new DictionaryTempDataProvider();

      return controller;
    }
  }

4. В global.asax.cs Apprication_Start набор событий DictionaryTempDataControllerFactory.

protected void Application_Start()
{
  RegisterRoutes(RouteTable.Routes);

  ControllerBuilder.Current.SetControllerFactory(
   new DictionaryTempDataControllerFactory()
  );
}
3
ответ дан 26 November 2019 в 20:13
поделиться
Другие вопросы по тегам:

Похожие вопросы: