动态站点,全局访问会话

时间:2011-04-18 13:26:21

标签: session asp.net-mvc-3 global-asax

您好我正在为我的学校开发一种wiki系统,该系统使用子域来查找wiki所属的课程。示例math1.wiki.com将是Math 1课程。 现在所有这些wiki都使用相同的数据库并获得一个wiki id,以查找要加载的数据。

这是我用来查找wiki id的代码。 Global.asax中

    protected void Session_Start()
    {
        var database = new DataContext();
        IWikiRepository rep = new WikiRepository(database);
        IWikiService service = new WikiService(rep);

        var domain = HttpContext.Current.Request.Url.Authority;
        var port = "";
        if (domain.Contains(':'))
        {
            var tmp = domain.Split(':');
            domain = tmp[0];
            port = tmp[1];
        }
        var split = domain.Split('.');
        var subdomain = split[0];

     //   if (subdomain == "localhost")
     //       subdomain = "wiki1";

        var wiki = service.GetSite(subdomain);

        if (wiki == null)
        {
            Response.StatusCode = 404;
            return;
        }

        Session["CurrentWiki"] = wiki;
    }

这一切都很好,但我想让mvc系统发送404请求,如果没有找到子域的维基。但是这不仅可以在session_start()中完成,因为它只使用Application_BeginRequest尝试每次会话运行一次,但遗憾的是我没有访问方法中的会话。

有人知道如何实现这个目标吗?

1 个答案:

答案 0 :(得分:0)

为什么你不能只创建一个你在主页开头调用的自定义函数来确定wiki是否存在,如果没有,重定向/错误页面/等等。如果它是自定义功能,您可以在必要时调用它。