2010-08-07 7 views
14

मेरे पास कुछ AJAX कॉल हैं जो jQuery.AJAX विधि के माध्यम से PartialViewResults प्रस्तुत करते हैं। यह बहुत अच्छा काम करता है, मैं अपने विचारों को वैसे ही प्रदान करता हूं जैसा मैं चाहता हूं।एएसपी.नेट एमवीसी एक AJAX अनुरोध को लॉग इन पेज पर रीडायरेक्ट किया जाता है जब FormsLogin सत्र अब सक्रिय नहीं होता

समस्या उत्पन्न होती है जब मैं थोड़ी देर के लिए पेज छोड़ देता हूं और फॉर्म ऑथ सत्र समाप्त हो जाता है। जब मैं एक एजेक्स अनुरोध करता हूं जो एक क्रिया पर क्लिक करता है, तो यह मेरे div में लॉगिन पेज दिखाता है।

मैं चाहता हूं कि यह WHOLE पृष्ठ को लॉगिन पृष्ठ पर रीडायरेक्ट करे। यदि अनुरोध एक ajax अनुरोध है और अगर यह एक HTTP रीडायरेक्ट (302) भेज रहा है यह भी जाँच Global.asax

की विधि Application_EndRequest() में

उत्तर

23

सेट इसे आप देख सकते हैं देखने के लिए अगर यह होता है , तो हम तक पहुँच सुलभ क्षेत्र में अपने ग्राहक कोड में फिर एक 401.

protected void Application_EndRequest() { 
      var context = new HttpContextWrapper(Context); 
      // If we're an ajax request, and doing a 302, then we actually need to do a 401 
      if (Context.Response.StatusCode == 302 && context.Request.IsAjaxRequest()) { 
       Context.Response.Clear(); 
       Context.Response.StatusCode = 401; 
      } 
     } 

भेजने के लिए, चाहते हैं दरअसल:

MyNamespace.handleAjaxError = function (XMLHttpRequest, textStatus, errorThrown) { 
    if (XMLHttpRequest.status == 401) { 
     // perform a redirect to the login page since we're no longer authorized 
     window.location.replace("logout path"); 
    }  
    } else { 
     MyNamespace.displayGeneralError(); 
    } 
}; 

    $.ajax({ 
    type: "GET", 
    url: userAdmin.addUserActionUrl, 
    success: userAdmin.createUserEditorDialog, 
    error: MyNamespace.handleAjaxError 
}); 
+4

यदि आप चाहते हैं अपने पृष्ठ पर सभी AJAX अनुरोधों के लिए ऐसा करने के लिए (एक पेज पर AJAX ऐप पर उपयोगी) http://api.jquery.com/ajaxComplete/ – MattW

+3

पर एक नज़र डालें, यह RedirectToAction() को किसी क्रिया के अंदर उपयोग करने की क्षमता को मारता है ajax। मैंने यह कोड लागू किया था और इसे हटाने के लिए आवश्यक था क्योंकि RedirectToAction() एक वैध 302 भी भेजता है। –

+0

@JasonButera यह सुनिश्चित नहीं है कि यह आपके लिए अभी भी दिलचस्प है, लेकिन मुझे एएसपी.नेट एमवीसी के नए संस्करणों के साथ इसे रोकने का एक तरीका मिला है। कृपया मेरा जवाब देखें। –

0

ASP.NET MVC की कभी नहीं संस्करणों के साथ वहाँ एक बहुत ई है इस समस्या को ठीक करने के लिए सहायक समाधान: Response.SuppressFormsAuthenticationRedirect

आप अपने Global.asax.cs में इस आवेदन कर सकते हैं:

protected void Application_BeginRequest(object sender, EventArgs e) 
{ 
    HttpContextWrapper context = new HttpContextWrapper(this.Context); 

    if (context.Request.IsAjaxRequest()) 
    { 
     context.Response.SuppressFormsAuthenticationRedirect = true; 
    } 
} 
0

जब मैं जगह में FormsAuthentication है, मैं इस सवाल का जवाब https://stackoverflow.com/a/3431350/1559213 @Chris Kooken द्वारा प्रदान में प्रवेश URL शामिल होंगे

protected void Application_EndRequest() 
    { 

     var context = new HttpContextWrapper(Context); 
     // If we're an ajax request, and doing a 302, then we actually need to do a 401 
     if (Context.Response.StatusCode == 302 && context.Request.IsAjaxRequest() && 
      Context.Response.RedirectLocation.Contains(FormsAuthentication.LoginUrl)) 
     { 
      Context.Response.Clear(); 
      Context.Response.StatusCode = 401; 
     } 
    } 
संबंधित मुद्दे