Asp.net-Mvc
從控制器初始化重定向不起作用
我已經覆蓋了檢查某些會話數據是否存在的控制器。儲存庫需要此數據才能正常工作,因此如果它不存在,則在檢查後使用者應註銷。
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(或其子類)處理的所有請求應用該屬性。