Global.asax 的Events與 Session的存取時機

今天有個需求是希望在Request發出後到所有的Controllers之前

希望能先取得Session內容再決定要送到哪個Controller

於是在 Global.asax內寫了以下程式碼

protected void Application_BeginRequest(object sender, EventArgs e)
{
    UserName = Session["UName"] == null ? "unknow" : Session["UName"].ToString();
}

結果發現在Application_BeginRequest存取Session會產生Exception

參考這篇推測應該是在Application_BeginRequest階段Session並未產生所以發生錯誤

將Application_BeginRequest改為Application_AcquireRequestState後就可以順利存取Session了

protected void Application_AcquireRequestState(object sender, EventArgs e)
{
    UserName = Session["UName"] == null ? "unknow" : Session["UName"].ToString();
}