2012-03-28 7 views
5

मैं नई वेब एपीआई परीक्षण उपयोग कर रहा हूँ और मेरे ApiController क्रियाओं में से एक से"HTTP शीर्षलेख भेजे जाने के बाद पुनर्निर्देशित नहीं किया जा सकता है।" जब HttpStatusCode.Unauthorized

HttpResponseMessage<MyObject>(new MyObject{ MyMessage = "Go Away!" }, HttpStatusCode.Unauthorized)

वापस आने की इच्छा के साथ HttpResponseMessage लौटने।

प्रपत्र प्रमाणीकरण प्रतिक्रिया को क्रैश करता है, क्रैश करता है और त्रुटि "Cannot redirect after HTTP headers have been sent." जोड़ता है और यह प्रतिक्रिया के लिए HTML है।

सामान्य दमन तकनीक जैसे this वेब एपीआई के साथ काम नहीं करते हैं।

क्या किसी को इसके आसपास कोई काम मिल गया है?

मैंने this forum post पर देखा है जहां लोग एक ही समस्या की रिपोर्ट करते हैं लेकिन समाधान इस मामले के लिए काम नहीं करते हैं। पहला समाधान सुझाया गया सामान्य दमन तकनीक का उपयोग करता है जो वेब एपीआई के लिए काम नहीं करता है। दूसरे नियंत्रक को मिलने से पहले अनुरोध को अवरुद्ध करने के लिए एक HttpMessageHandler का उपयोग करता है, मैं नियंत्रक को सामान्य के रूप में आग लगाना चाहता हूं।

DelegatingHandler में देखने के बाद मैं HttpResponseMessage तक पहुंच प्राप्त कर सकता हूं लेकिन मुझे पता नहीं है कि फ़ॉर्मसऑथ को रीडायरेक्ट करने से रोकने के लिए इसके साथ क्या करना है।

+0

समझाया गया कि प्रस्तावित समाधान क्यों काम नहीं करते हैं, यहां सहायक हो सकते हैं। – Maurice

+0

@ मॉरीस अच्छा विचार, मैंने – Magpie

+0

प्रश्न को अद्यतन किया है तो फिल हैक ब्लॉग पोस्ट में उल्लिखित लोगों की तरह असामान्य दमन तकनीक_ क्यों करें? वे वेबएपीआई जैसी आरईएसटी सेवाओं के लिए हैं। – Maurice

उत्तर

2

मैं जब Phil Haack's SuppressFormsAuthenticationRedirectModule

का उपयोग कर एक ही मुद्दे का सामना करना पड़ा मैं नीचे के रूप में

private void OnEndRequest(object source, EventArgs args) 
{ 
    var context = (HttpApplication)source; 
    var response = context.Response; 

    if (context.Context.Items.Contains(SuppressAuthenticationKey)) 
    { 
     context.Server.ClearError(); //Clearing server error 

     response.TrySkipIisCustomErrors = true; 
     response.ClearContent(); 
     response.StatusCode = 401; 
     response.RedirectLocation = null; 
    } 
} 
+1

यह एएसपी.नेट वेब एपीआई के साथ मेरे लिए बहुत अच्छा काम करता है। मुझे केवल 'context.Server.ClearError() का उपयोग करने की आवश्यकता है;' मैं सशर्त रूप से इसे अपने Global.asax.cs 'Application_PostRequestHandlerExecute' विधि से कॉल करता हूं। इसने मेरे JSON प्रतिक्रिया के बाद रीडायरेक्ट HTML को जोड़ने से ASP.NET को रोक दिया। –

0

हाय दिखाया सर्वर त्रुटि को साफ़ करके मेरे मामले में यह तय करने के लिए के रूप में इस सवाल अभी भी खुला रहा प्रतीत हो रहा है में कामयाब सोचा कि मैं इंगित करता हूं कि नवीनतम एमवीसी 4 आरसी रिलीज में प्रपत्र रीडायरेक्ट डिफ़ॉल्ट रूप से अक्षम प्रतीत होता है। मैंने इस प्रश्न का जवाब देते हुए कुछ खुदाई की थी Prevent FormsAuthenticationModule of intercepting ASP.NET Web API responses

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

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