2015-12-14 6 views
13

पर अपवाद भेज दिया गया है मैं एक asp.net MVC 5 आवेदन जिसमें मैं ReturnUrl पर रीडायरेक्ट करने कोशिश कर रहा था नीचे कोड लागू करके विकासशील हूँ:सर्वर हैडर नहीं जोड़ी जा सकती HTTP हेडर के बाद @ Html.AntiForgery

[HttpPost] 
[AllowAnonymous] 
public ActionResult Login(UserLogin model, string returnUrl) 
{ 
    if (ModelState.IsValid) 
    { 
     string EncryptedPassword = GetMD5(model.Password); 
     if (DataAccess.DAL.UserIsValid(model.Username, EncryptedPassword)) 
     { 
      FormsAuthentication.SetAuthCookie(model.Username, true); 
      if (String.IsNullOrEmpty(returnUrl)) 
      { 
       return RedirectToAction("Index", "Home"); 
      } 
      else 
      { 
       Response.Redirect(returnUrl); 
      } 
     } 
     else 
     { 
      ModelState.AddModelError("", "Invalid Username or Password"); 
     } 
    } 
    return View(); 
} 

उपरोक्त कोड ठीक काम कर रहा है, लेकिन समस्या यह है कि जब मैं लॉगिन फॉर्म पोस्ट करता हूं, तो यह मुझे एक अपवाद देता है जिसे मैंने कभी सामना नहीं किया है और मुझे उस अपवाद को हल करने में कठिनाइयों का सामना करना पड़ रहा है जो दृश्य में उत्पन्न हो रहा है लॉगिन.cshtml, लाइन पर:

@Html.AntiForgeryToken() 

और एक्सेप्टि उस पर यह फेंकता है:

Server cannot append header after HTTP headers have been sent. 

मैंने बहुत कुछ शोध किया है लेकिन मैं निष्कर्ष तक पहुंचने में असमर्थ हूं। जब मैं @ Html.AntiForgeryToken() लाइन को हटाता हूं, तो मेरा एप्लिकेशन ठीक काम करता है, लेकिन मैं यह नहीं करना चाहता, मैं चाहता हूं कि मेरा एप्लिकेशन क्रॉस-साइट अनुरोध सुरक्षित रहे।

क्या कोई मेरी मदद कर सकता है, मैं इस अपवाद से कैसे छुटकारा पा सकता हूं?

+1

व्यू कोड दिखाएं जहां आप लाइन @ Html.AntiForgeryToken() – ojf

+0

का उपयोग करते हैं, क्या आपके व्यू में आपके फॉर्म में @ @ HTML.AntiForgeryToken() 'है? –

+0

@ पेड्रोबेनेवाइड हां, यह शुरुआती फॉर्म के अंदर है .. सोरी देर से उत्तर के लिए। –

उत्तर

42

Response.Redirect(anyUrl) स्थिति कोड 302 पर सेट होने पर, और हैडर प्रतिक्रिया करने के लिए जोड़ा जाएगा:

HTTP 1.0 302 Object Moved 
Location: http://anyurl.com 

और जब ViewResult निष्पादित किया जाता है और उस्तरा, देखने Html.AntiForgeryToken() बुलाया जाएगा प्रस्तुत करना तो सहायक की कोशिश करता है हेडर X-Frame-Options और प्रतिक्रिया के लिए कुछ कुकीज़ जोड़ें, यह अपवाद का कारण है।

लेकिन चिंता न करें आप X-Frame-Options शीर्षलेख को जोड़ने के लिए दबा सकते हैं, बस में AntiForgeryConfig.SuppressXFrameOptionsHeader = true; डाल दें।

लेकिन मैं उसे बदलने के लिए सुझाव देते हैं:

Response.Redirect(returnUrl); 

को
return Redirect(returnUrl); 

नोट

के बाद से नेट कोड खोला गया था जैसा कि आप देख सकते हैं कि कैसे AntiForgeryToken काम करता है, यहाँ देखें AntiForgeryWorker

+0

ओह, हाँ भाई, बहुत बहुत धन्यवाद। मैं अभी भी उस पर फंस गया था। आपने इसे खींचा, गंभीरता से :) उत्तर के रूप में चिह्नित :) –

+0

@ बिलाल अहमद तो यह सहायक था? कृपया भी मत भूलना xd –

+0

हां, बिल्कुल, यह था। मैंने वोट देने की कोशिश की, लेकिन उन्होंने मुझे तब तक इंतजार करने के लिए कहा जब तक कि मुझे 15: पी –

1

मुझे Response.Redirect(returnUrl) के साथ एक ही त्रुटि मिल रही थी। Response.Redirect(returnUrl, false) को बदलने के बाद समस्या को हल किया गया।

संबंधित मुद्दे