2015-09-03 2 views
1

Я пытаюсь переписать старый интернет-магазин на MVC 6, и я решаю множество проблем. Одна из них заключается в том, что мне нужно настроить некоторые данные по умолчанию при начале сеанса. Я не нашел ничего полезного для thins в MVC 6. У меня есть несколько магазинов, реализованных как одно приложение, и мне нужно установить, например, ShopID при запуске сеанса. Настройка осуществляется по IP-адресу. Это не единственное, что я здесь установлю, но это одна из самых описательных вещей.Альтернатива «Session_Start» в MVC 6

У вас есть идея, как реализовать это, или совет, как это сделать по-другому?

Пример кода от старой реализации в global.asax:

void Session_Start(object sender, EventArgs e) 
    { 
    string url = Request.Url.Host; 
    switch (url) 
    { 
    case "127.0.0.207": 
    (SomeSessionObject)Session["SessionData"].ShopID = 123; 
    break; 
    case "127.0.0.210": 
    (SomeSessionObject)Session["SessionData"].ShopID = 345; 
    break; 
    } 
    } 

Этот код я хотел бы записать как-то в MVC 6, но понятия не имею, где не размещать его, или даже, если это возможно.

+0

Я предлагаю добавить код на вопрос, чтобы показать, что вы делали до сих пор, и, чтобы сузить то, что вы просите. – Peopleware

ответ

1

Возможно, это один из способов достижения того, что вы пытаетесь сделать ... Здесь я регистрирую промежуточное программное обеспечение сразу после промежуточного ПО Session, так что когда запрос приходит в него, он будет перехвачен этим промежуточным программным обеспечением после того, как промежуточное ПО Session Работа. Вы можете попробовать его и посмотреть, подходит ли он для вашего сценария.

using Microsoft.AspNet.Builder; 
using Microsoft.AspNet.Hosting; 
using Microsoft.AspNet.Http; 
using Microsoft.Framework.DependencyInjection; 

namespace WebApplication43 
{ 
    public class Startup 
    { 
     // This method gets called by a runtime. 
     // Use this method to add services to the container 
     public void ConfigureServices(IServiceCollection services) 
     { 
      services.AddCaching(); 

      services.AddSession(); 

      services.AddMvc(); 
     } 

     // Configure is called after ConfigureServices is called. 
     public void Configure(IApplicationBuilder app, IHostingEnvironment env) 
     { 
      app.UseStaticFiles(); 

      app.UseSession(); 

      app.Use((httpContext, nextMiddleware) => 
      { 
       httpContext.Session.SetInt32("key1", 10); 
       httpContext.Session.SetString("key2", "blah"); 

       return nextMiddleware(); 
      }); 

      app.UseMvc(); 
     } 
    } 
} 

Связанные зависимости пакетов в project.json:

"dependencies": { 
    "Microsoft.AspNet.Mvc": "6.0.0-beta7", 
    "Microsoft.AspNet.StaticFiles": "1.0.0-beta7", 
    "Microsoft.AspNet.Session": "1.0.0-beta7", 
    "Microsoft.Framework.Caching.Memory": "1.0.0-beta7", 
    "Microsoft.AspNet.Http.Extensions": "1.0.0-beta7", 
+1

Кажется, это работает :) Проблема только в том, что содержание использования происходит по каждому отдельному запросу и, конечно же, по запросам, когда изображение или что-то еще запрашивается. Во всяком случае, это хорошая отправная точка, поэтому большое спасибо. – bezejmeny

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