【问题标题】:Dynamic site, access session in global动态站点,全局访问会话
【发布时间】:2011-04-18 13:26:20
【问题描述】:

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

这是我用来查找 wiki id 的代码。 全球.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;
    }

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

有谁知道我如何实现这个?

【问题讨论】:

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


    【解决方案1】:

    为什么你不能在主页开始时创建一个自定义函数来确定 wiki 是否存在,如果不存在,则重定向/错误页面/其他。如果是自定义函数,你可以在需要的时候调用它。

    【讨论】:

    • 如果该人使用链接并直接转到另一个控制器怎么办?那么网站不会被检查,并打开错误!
    猜你喜欢
    • 1970-01-01
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-12
    • 2011-10-17
    • 1970-01-01
    相关资源
    最近更新 更多