2011-04-18 104 views
0

您好,我目前正在爲我的學校開發一種wiki系統,該系統使用子域來查找wiki所屬的課程。示例math1.wiki.com將成爲數學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嘗試過,但可惜我沒有訪問方法中的會話。

做任何人知道我可以如何實現這個?

回答

0

爲什麼不能在主頁開始時調用一個自定義函數來確定wiki是否存在,如果不存在,重定向/錯誤頁面/其他。如果它是一個自定義函數,您可以在必要時重新調用它。

+0

如果此人使用鏈接並直接轉到其他控制器會怎麼樣?然後,該網站不會被檢查,並打開錯誤! – Androme 2011-04-18 14:00:39