2011-02-24 23 views
11

मैं एक एएसपीनेट अनुप्रयोग को mvc3 में परिवर्तित कर रहा हूं। आइए कहें कि मेरे पास एक साइन इन पेज है जिसके लिए https और प्रत्येक अन्य पृष्ठ की आवश्यकता है केवल http की आवश्यकता है मैं साइनइन को https पर कैसे रीडायरेक्ट कर सकता हूं और अन्य सभी पृष्ठों को http पर रख सकता हूं?mvc3 https और http

कोई सुझाव बहुत अच्छा होगा!

उत्तर

14

RequireHttpsAttribute कक्षा आप जो चाहते हैं हो सकता है। 1. क्योंकि आप इसे छूने के लिए की आवश्यकता नहीं है:

[RequireHttps] 
public ActionResult SignIn() { 
    return View(); 
} 
+0

कूल धन्यवाद बर्ट्रेंड! एमवीसी जीवन को आसान बना रहा है :) –

+0

यह ध्यान देने योग्य है कि साइन इन करने के बाद, आपके प्रश्न के अनुसार, आपको उन्हें सीधे पृष्ठ का उपयोग करके अगले पृष्ठ पर रीडायरेक्ट करना चाहिए। इस तरह वे पूरे समय https पर अटक नहीं जाते हैं। – Jab

+0

@jab हॉट स्पष्ट रूप से http का उपयोग कर अगले पृष्ठ पर रीडायरेक्ट करने के लिए? क्या यह RedirectToAction() के साथ संभव है? – pramodtech

2

मुद्दा यह है कि अपने सभी अनुरोधों में लॉग के बाद भले ही आप इसे

4

मैं इस समाधान चाहते क्योंकि नहीं करना चाहती https होने जा रहे हैं है फिर वीएस में स्वयं सजावटकर्ता ब्राउज़र को डीबग में भी https में साइट प्रस्तुत करने का कारण बनता है।

  1. आप इसे एक आधार नियंत्रक में लागू करने और अपने सभी नियंत्रकों कि नियंत्रक से विरासत, तुम्हें पता है कि वहाँ कोई वापस करते "तो बात करने के लिए" में फिसल है है।

    #if !DEBUG 
    #define RELEASE 
    #endif namespace ProjectName.UI.Controllers { 
        using System.Web.Mvc; 
        #if RELEASE 
         [RequireHttps] 
        #endif 
        public abstract partial class ProjectNameBaseController : Controller 
        { 
        } 
    } 
    
4

मेरा एक सह कार्यकर्ता और मैं इस को देखा और हम एक अच्छा समाधान पाया विश्वास करते हैं।

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, Inherited = true, AllowMultiple = false)] 
public class HttpsRequiredAttribute : RequireHttpsAttribute 
{ 
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext) 
    { 
     // Check to see if we're secure 
     string requirestr = ConfigurationManager.AppSettings["RequireHttps"]; 
     bool require; 
     if (bool.TryParse(requirestr, out require) && require) 
      base.HandleNonHttpsRequest(filterContext); 
    }  

} 

यह RequireHttpsAttribute बढ़ा कर काम करता है, और के रूप में AttributeTargets ने संकेत दिया, एक वर्ग या विधि के लिए लागू किया जा सकता: यहाँ है कि हम क्या के साथ आया है। हम फिर RequHttpsAttribute में वर्चुअल फ़ंक्शन को ओवरराइड करते हैं। विधि क्या है "WebHconfps" नामक कुंजी के लिए Web.config फ़ाइल की जांच करें। अगर यह नहीं मिल रहा है, या यह एक अवैध बूल मान है (जो bool.tryparse जांच करता है), तो उसे Https की आवश्यकता नहीं है। यदि यह मान को सत्य के रूप में पाता है, तो इसके लिए HTTPS की आवश्यकता होती है।

आपको इस एक्सटेंशन का उपयोग करते हैं, तो आप अपने Web.config कहा जाता है में एक महत्वपूर्ण जोड़ने के लिए "RequireHttps," इसलिए की तरह की आवश्यकता होगी: <add key="RequireHttps" value="true"/> फिर आप बंद आवश्यकता HTTPS के लिए जब आप के लिए इस चर बदलकर बदल सकते हैं डीबगिंग कर रहे हैं, या अपनी वेब.कॉन्फिग फ़ाइल को बदलकर जहां भी आपकी साइट तैनात की जा सकती है।

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