【问题标题】:Alternative to 'Session_Start' in MVC 6MVC 6 中“Session_Start”的替代方案
【发布时间】:2015-11-29 14:22:12
【问题描述】:

我正在尝试将旧的电子商店重写为 MVC 6,我正在解决很多问题。其中之一是我需要在会话开始时设置一些默认数据。我发现在 MVC 6 中没有任何东西可用于瘦身。 我有多个商店作为一个应用程序实现,我需要在会话开始时设置例如 ShopID。通过 IP 地址进行设置。这不是我放在那里的唯一东西,但它是最具描述性的东西之一。

您对如何实现这一点有一些想法,或者建议如何以不同的方式实现它?

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 中写下这段代码,但不知道将它放在哪里,或者即使它是可能的。

【问题讨论】:

  • 我建议在问题中添加一些代码,以显示您到目前为止所做的工作并缩小您的要求。

标签: asp.net-core asp.net-core-mvc


【解决方案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",

【讨论】:

  • 似乎这行得通 :) 唯一的问题是使用的内容发生在每个单独的请求上,当然也发生在图像或其他任何请求时的请求上。无论如何,这是一个很好的起点,非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多