我有一個asp.net站點,在這裏我正在檢查Global.asax
中的會話變量Application_BeginRequest
,但它總是說object reference not set to an instance of an object
,我不明白這一點,因爲我正在檢查在使用該值之前爲null的條件,但它仍然會拋出上述錯誤,但是當我在default.aspx Page_Load
事件中檢查它時,它可以正常工作,沒有任何問題。什麼時候會話狀態準備好在asp.net中使用
誰能告訴什麼背後的問題,我是不是不應該使用內Application_BeginRequest
會話變量如果是的話,那又怎麼會被檢查會話值,我想要實現的是,如果用戶(如果Session [「Login」]不爲空意味着用戶登錄)並且有權訪問該頁面,然後允許他/她將他/她扔到主頁。
這是我在做什麼。
以下功能檢查,如果用戶登錄:
public static String LoggedInUser
{
get
{
if (HttpContext.Current.Session["Login"] == null)
return String.Empty;
else
return HttpContext.Current.Session["Login"].ToString();
}
set
{
HttpContext.Current.Session["Login"] = value;
}
}
以下功能檢查,如果用戶有權訪問這些頁面:
public static bool IsPageAllowed(String Pagename)
{
bool _isPageAllowed = false;
XmlDocument doc = new XmlDocument();
doc.Load(HttpContext.Current.Server.MapPath("Pagenames.xml"));
if (LoggedInUser != String.Empty)
{
XmlNodeList list = doc.DocumentElement.SelectNodes("/AllPages/Pages[@user='" + GetLoggedInUserRole(Globals.LoggedInUser).ToLower() + "']/Page[contains(text(), '" + Pagename + "')]");
if (list.Count > 0)
_isPageAllowed = true;
}
return _isPageAllowed;
}
及以下功能用於在Application_BeginRequest
用戶基於重定向他們的權利:
if (!Globals.IsPageAllowed(rawUrl.Substring(1, rawUrl.Length - 1)))
{
Response.Redirect("default.aspx");
}
我嘗試使用Application_AcquireRequestState事件並啓動我的會話(Session [「Login」]那裏),但仍然在Application_BeginRequest中,我得到對象引用錯誤。 – Abbas
@Abbas - 你有沒有檢查過我發佈的MSDN鏈接? BeginRequest事件發生在'PostAcquireSessionState'之前,所以我不確定爲什麼你期望'Session'在請求生命期早期出現。 –