2010-04-01 10 views
16

के साथ एचटीटीपीएस से दूर रीडायरेक्ट करें मैं एएसपी.नेट एमवीसी 2 का उपयोग कर रहा हूं और एक लॉगिन पेज है जो HTTPS के माध्यम से सुरक्षित है। यह सुनिश्चित करने के लिए कि उपयोगकर्ता हमेशा एसएसएल के माध्यम से उन पृष्ठों तक पहुंचता है, मैंने नियंत्रक को विशेषता [RequireHttps] जोड़ा है। यह पूरी तरह से काम करता है।एएसपी.नेट एमवीसी ऐप

जब उन्होंने सफलतापूर्वक लॉग इन किया है, तो मैं उन्हें वापस HTTP संस्करण पर रीडायरेक्ट करना चाहता हूं। हालांकि, [RequireHttp] विशेषता नहीं है और मैं अपने सिर को पाने के लिए संघर्ष कर रहा हूं कि मैं इसे कैसे प्राप्त कर सकता हूं।

जोड़ा गया (संभावित) जटिलता यह है कि जब वेबसाइट में उत्पादन के दौरान डोमेन के मार्ग पर होस्ट किया जाता है, लेकिन विकास और परीक्षण उद्देश्यों के लिए यह एक उप निर्देशिका/आभासी निर्देशिका/अनुप्रयोग के भीतर है।

क्या मैं इसे अधिक सोच रहा हूं और क्या मुझे चेहरे पर घूरने का एक आसान समाधान है? या यह थोड़ा और जटिल है?

+0

http://stackoverflow.com/questions/761704/mixed-http-https-site के संभावित डुप्लिकेट – Gonzalo

+4

यह कोई डुप्लिकेट (कम से कम नहीं एक गोंजालो लिंक के) मैं यात्रा करना चाहते हैं के रूप में नहीं है कोई दूसरा रास्ता। * * HTTPS * से * HTTP तक। जब तक कोई पैरामीटर नहीं है जिसे मैं '[RequHttps] 'पर नहीं ढूंढ पा रहा हूं, तो यह मेरे लिए उपयोग नहीं है। – Amadiere

उत्तर

25

खुदाई के बाद, मैं खुद को घुमाने की लाइनों के साथ चला गया क्योंकि इसमें एक अच्छा अंतर्निहित समाधान नहीं दिखता था (जैसा कि बताया गया है, एमवीसी 2 अनुप्रयोगों के लिए एक महान है [RequireHttps])। this problem को çağdaş के समाधान से प्रेरित होकर और मैं निम्नलिखित कोड साथ आने के लिए adapated:

public class RequireHttp : ActionFilterAttribute 
{ 
    public override void OnActionExecuting(ActionExecutingContext filterContext) 
    { 
     // If the request has arrived via HTTPS... 
     if (filterContext.HttpContext.Request.IsSecureConnection) 
     { 
      filterContext.Result = new RedirectResult(filterContext.HttpContext.Request.Url.ToString().Replace("https:", "http:")); // Go on, bugger off "s"! 
      filterContext.Result.ExecuteResult(filterContext); 
     } 
     base.OnActionExecuting(filterContext); 
    } 
} 

अब मैं अपने नियंत्रक तरीकों को यह जोड़ सकते हैं और यह बर्ताव करता है (प्रतीत होता है) के रूप में उम्मीद। अगर मैं अपने नियंत्रक पर एचटीटीपीएस प्रोटोकॉल से इंडेक्स एक्शन पर रीडायरेक्ट करता हूं, तो यह HTTP पर रीडायरेक्ट होगा। यह केवल इंडेक्स एक्शन रिसैट के लिए HTTP पहुंच की अनुमति देता है।

[RequireHttp] 
public ActionResult Index() { 
    return View(); 
} 
संबंधित मुद्दे