所以我試圖向用戶顯示一條消息,當他從他未被授權查看的頁面重定向時。例如:用戶轉到www.mypage.com/users並重定向到www.mypage.com/home。從AuthorizeCore重定向到另一個具有自定義錯誤消息的控制器
我使用MVC模式,它是asp.net web應用程序。 我重寫AuthorizeAttribute和AuthorizeCore方法嘗試這樣的:
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if (false)//Here is custom logic that is working
{
string message = "You don't have an access to selected menu item.";
var dataDict = HttpContext.Current.Session["__ControllerTempData"] as IDictionary<string, object>;
if (dataDict == null)
{
Dictionary<string, object> dictionary = new Dictionary<string, object>();
dictionary["myErrorMessage"] = message;
HttpContext.Current.Session["__ControllerTempData"] = dictionary;
}
else
{
dataDict["myErrorMessage"] = message;
HttpContext.Current.Session["__ControllerTempData"] = dataDict;
}
_isAuthorized = false;
httpContext.Response.Redirect("Home");
}
else
{
_isAuthorized = base.AuthorizeCore(httpContext);
}
return _isAuthorized;
}
然後我試圖從該視圖訪問它
var unauthorized_access_message = TempData["myErrorMessage"] as List <string> ?? new List<string>() ;
但它不工作。我也試過this,但不是這樣,因爲我試圖訪問一個控制器,然後重定向到另一個。 是否有任何解決方案將變量傳遞給視圖或檢查某些狀態(如重定向原因)?
很抱歉,但不起作用。我認爲這是因爲重定向。比方說,有人試圖訪問帳戶控制器,但沒有權限(它會打OnAuthorization並設置tempdata),所以他將被重定向到主控制器(它會再次打到OnAuthorization,但之後就沒有那個TempData了)。至少當我嘗試從Home/Index訪問它時,它是空字符串。 – maximelian1986
通常情況下,匿名用戶應該被重定向到「登錄頁面」而不是「主頁」,除非主頁都是匿名訪問。 – Win
問題是它不是匿名用戶。我有自定義身份驗證。因此,用戶通過身份驗證但未獲得授權,可以說管理員可以訪問帳戶/成員,他可以在其中獲得成員名單。但是,如果會員嘗試訪問它,他必須轉到主頁/索引並看到「沒有權限」通知。 – maximelian1986