Asp.net-Mvc

從控制器初始化重定向不起作用

  • December 30, 2014

我已經覆蓋了檢查某些會話數據是​​否存在的控制器。儲存庫需要此數據才能正常工作,因此如果它不存在,則在檢查後使用者應註銷。

protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
   base.Initialize(requestContext);
   if (Session["CompanyID"] != null)
   {
       repo.CompanyID = (long)Session["CompanyID"];
   }
   else
   {
       RedirectToAction("LogOff", "Account");
   }
}

我的程式碼看起來像這樣,但即使呼叫了 RedirectToAction,控制器仍會打開預設操作並且使用者不會註銷。你能推薦如何處理這個問題嗎?

我以這種方式使用此會話數據,因為這是我知道的第一個可以訪問它的地方,在這裡我可以檢查此特定數據是否存在。它是在使用者登錄時寫入的。

該數據是數據庫中使用者的一部分。我已經創建了一個自定義成員資格和角色提供者。有沒有辦法以某種方式將此數據添加到 MembershipUser 類型的“使用者”,以便可以在建構子中訪問它,如使用者使用者名?

請考慮改用自定義ActionFilter

public class HasCompanyIdAttribute : ActionFilterAttribute
{
   public override void OnActionExecuting(ActionExecutingContext filterContext)
   {
       if (filterContext.HttpContext.Session["CompanyID"] == null)
       {
           filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary(new {action = "LogOff", controller = "Account"}));
       }
   }
}

然後可以這樣應用它:

[HasCompanyId]
public class MyController : Controller 
{
   public ActionResult SomeAction()
   {
       return View();
   }
}

這將為 MyController(或其子類)處理的所有請求應用該屬性。

引用自:https://stackoverflow.com/questions/8225930