2009-06-02 17 views
5

हमारे ASP.NET MVC आवेदन में के लिए प्रमाणीकरण रूपों, हम अपने आप को उन अनुप्रेषित। समस्या यह है कि एप्लिकेशन के बीच में एक क्रिया, जिसे किसी उपकरण द्वारा उपयोग करने के लिए डिज़ाइन किया गया है, को खराब पहुंच पर सीधे-सीधे HTTP 401 प्रतिक्रिया वापस करने की आवश्यकता होती है। मैं इस विशिष्ट कार्रवाई के लिए रीडायरेक्ट बिना वास्तविक HTTP 401 कोड कैसे वापस कर सकता हूं?ओवरराइड ASP.NET एक ही पृष्ठ

उत्तर

6

निम्नलिखित समाधान काम करता है, हालांकि मैं बिल्कुल यकीन है कि यह इष्टतम है नहीं कर रहा हूँ:

public class HttpAuthenticationRequiredResult : ActionResult 
{ 
    public override void ExecuteResult(ControllerContext context) 
    { 
     var response = context.HttpContext.Response; 
     response.StatusCode = 401; 
     response.AddHeader("WWW-Authenticate", "Basic realm=\"whatever\""); 
     response.Flush(); 
     response.Close(); 
    } 
} 

तब आप आवश्यक 401 कोड उत्पन्न करने के लिए HttpUnauthorizedResult के बजाय उपरोक्त परिणाम लौटाएं। हालांकि, यह मेरे लिए काफी कठोर लगता है।

4

आप अलग-अलग पथों के लिए <system.web> अनुभाग अलग कर सकते हैं। यहाँ एक उदाहरण है:

<configuration> 
    <location path="Foo/Bar.aspx"> 
    <system.web> 
     <authorization> 
     <allow roles="GoodGuys" /> 
     <deny users="*"/> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 

इस मामले में, पेज "फू/Bar.aspx" Goodguys भूमिका के साथ लोगों के लिए अनुमति दी है, लेकिन सभी दूसरों के लिए इनकार किया है।

आपके मामले में, आप सभी प्रमाणीकरण के बिना अनुमति देने के लिए चाहते हो सकता है:

<configuration> 
    <location path="Foo/Bar.aspx"> 
    <system.web> 
     <authentication mode="None" /> 
     <authorization> 
     <allow users="*" /> 
     </authorization> 
    </system.web> 
    </location> 
</configuration> 
+0

यदि यह थे सीधे-अप ASP.NET, कि काम करेगा, लेकिन मैं कैसे ASP.NET MVC के साथ है कि तकनीक का उपयोग करने के लिए स्पष्ट नहीं कर रहा हूँ। समस्या यह है कि चाहिए-वापसी -401 यूआरएल myapp/{rout पैरामीटर}/उपकरण पर हैं; system.web में निर्दिष्ट करने का कोई तरीका नहीं है, भले ही मैं चाहता हूं। –

+0

* ब्लश * जब मैंने आपकी पोस्ट पढ़ी तो मुझे "एमवीसी" दिखाई नहीं दिया। – Randolpho

+0

हालांकि यह प्रमाणीकरण तत्व के लिए काम करता है, यह प्रमाणीकरण के लिए काम नहीं करता है - मुझे निम्न त्रुटि मिलती है: इस अनुरोध की सेवा करने के लिए आवश्यक कॉन्फ़िगरेशन फ़ाइल की प्रक्रिया के दौरान एक त्रुटि हुई। कृपया नीचे दिए गए विशिष्ट त्रुटि विवरणों की समीक्षा करें और अपनी कॉन्फ़िगरेशन फ़ाइल को उचित रूप से संशोधित करें। यह आवेदन स्तर से परे allowDefinition = 'MachineToAplication' के रूप में पंजीकृत अनुभाग का उपयोग करने में त्रुटि है। –

0

एक समान मामला था जहां मुझे एक ऐसा अवांछित रीडायरेक्ट ट्रिगर करने की आवश्यकता होती थी (मूल रूप से प्रमाणीकरण विफल होने के बारे में एक संदेश और यह त्रुटि जानकारी के बिना लॉगिन स्क्रीन पर रीडायरेक्ट कर रहा था)।

यह समस्या हल हो:

Response.SuppressFormsAuthenticationRedirect = true; 
संबंधित मुद्दे