2014-04-08 11 views
5

समस्या वक्तव्य MVC में रीडायरेक्ट लूप अपवाद दे रही है:लागू करने कार्रवाई फिल्टर विश्व स्तर पर

मैं प्रवेश पृष्ठ पर सत्र समाप्त हो या यदि उपयोगकर्ता रीडायरेक्ट करने के लिए कोशिश कर रहा हूँ उपयोगकर्ता MVC 4 में प्रवेश करने के रेजर का उपयोग किए बिना किसी भी दृश्य का उपयोग करने की कोशिश करता है तो ।

    इसके बजाय अगर मैं हर कार्रवाई के तरीकों यह ठीक काम करता है के लिए फिल्टर विशेषता का उपयोग कार्रवाई फिल्टर विश्व स्तर पर filter.config में लागू करने की
  • मैं इस क्रिया फ़िल्टर को प्रत्येक कार्रवाई विधि पर लागू नहीं करना चाहता हूं।

मैं इसे वैश्विक स्तर पर लागू करना चाहता हूं। वैश्विक स्तर पर एक्शन फ़िल्टर लागू करके रीडायरेक्ट लूप से कैसे बचें ?? इसे कैसे प्राप्त करें ??

लॉग इन नियंत्रक:

//Get Method 
public ActionResult Index(string returnUrl) 
{ 
    ViewBag.ReturnUrl = returnUrl; 
    return View(); 
} 

//Post Method 
[HttpPost] 
public ActionResult Index(LoginModel loginModel, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     objLoginDC.LoginID = loginModel.LoginID; 
     objLoginDC.Password = loginModel.Password; 
     if (objSvcMasterConfig.IsValid(objLoginDC)) 
     { 
      var varLoginTenantUserDetails = objSvcMasterConfig.GetLoginUserDetails(objLoginDC); 
      Session["User"] = varLoginUserDetails[0]; 
      FormsAuthentication.SetAuthCookie(objLoginDC.LoginID, objLoginDC.RememberMe); 

      return RedirectToLogin(returnUrl); 
     } 
     else 
     { 
      ModelState.AddModelError("", "The Log In ID or Password provided is incorrect."); 
     } 
    } 

    return View(loginModel); 
} 

फिल्टर (कार्रवाई फ़िल्टर):

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class CheckUserSessionAttribute : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     HttpSessionStateBase session = filterContext.HttpContext.Session; 
     var user = session["User"]; 

     if (((user == null) && (!session.IsNewSession)) || (session.IsNewSession)) 
     { 
      session.RemoveAll(); 
      session.Clear(); 
      session.Abandon(); 

      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Login" }, { "action", "Index" } }); 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 

फ़िल्टर Config.cs:

public class FilterConfig 
{ 
    public static void RegisterGlobalFilters(GlobalFilterCollection filters) 
    { 
     filters.Add(new HandleErrorAttribute()); 
     filters.Add(new Filters.CheckUserSessionAttribute()); 
    } 
} 

उत्तर

3

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class CheckUserSessionAttribute : ActionFilterAttribute 
{ 

    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     //do not execute the filter logic for Login/Index 
     if (filterContext.RouteData.GetRequiredString("controller").Equals("LogIn", StringComparison.CurrentCultureIgnoreCase) 
      && filterContext.RouteData.GetRequiredString("action").Equals("Index", StringComparison.CurrentCultureIgnoreCase)){ 
      return; 
     } 

     HttpSessionStateBase session = filterContext.HttpContext.Session; 
     var user = session["User"]; 

     if (((user == null) && (!session.IsNewSession)) || (session.IsNewSession)) 
     { 
      session.RemoveAll(); 
      session.Clear(); 
      session.Abandon(); 

      filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary { { "controller", "Login" }, { "action", "Index" } }); 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 
: आप अपने फिल्टर तर्क को क्रियान्वित नहीं जब नियंत्रक लॉग इन है और कार्रवाई सूचकांक है की कोशिश कर सकते
संबंधित मुद्दे