ASP.NET MVC आवश्यकता केवल उत्पादन में है


121

मैं असुरक्षित HTTP अनुरोधों को एक्शन विधि में भेजने से रोकने के लिए EssentialHttpsAttribute का उपयोग करना चाहता हूं ।

सी#

[RequireHttps] //apply to all actions in controller
public class SomeController 
{
    [RequireHttps] //apply to this action only
    public ActionResult SomeAction()
    {
        ...
    }
}

वीबी

<RequireHttps()> _
Public Class SomeController

    <RequireHttps()> _
    Public Function SomeAction() As ActionResult
        ...
    End Function

End Class

दुर्भाग्य से, ASP.NET विकास सर्वर HTTPS का समर्थन नहीं करता है।

उत्पादन वातावरण में प्रकाशित होने पर मैं अपने ASP.NET MVC एप्लिकेशन का उपयोग आवश्यकताएँ कैसे कर सकता हूं, लेकिन ASP.NET विकास सर्वर पर मेरे विकास कार्य केंद्र पर चलने पर नहीं?


3
अपने स्थानीय IIS और IIS एक्सप्रेस के साथ परीक्षण करें। मेरी एसएसएल ब्लॉग देखें blogs.msdn.com/b/rickandy/archive/2011/04/22/... और blogs.msdn.com/b/rickandy/archive/2012/03/23/...
RickAndMSFT

जवाबों:


129

यदि आप अपने विकास कार्य केंद्र पर रिलीज़ बिल्ड बनाते हैं तो यह मदद नहीं करेगा, लेकिन सशर्त संकलन कार्य कर सकता है ...

#if !DEBUG
[RequireHttps] //apply to all actions in controller
#endif
public class SomeController 
{
    //... or ...
#if !DEBUG
    [RequireHttps] //apply to this action only
#endif
    public ActionResult SomeAction()
    {
    }

}

अपडेट करें

Visual Basic में, विशेषताएँ तकनीकी रूप से उसी लाइन का हिस्सा होती हैं जिस परिभाषा पर वे लागू होते हैं। आप सशर्त संकलन कथनों को एक पंक्ति के अंदर नहीं रख सकते हैं, इसलिए आपको फ़ंक्शन घोषणा को दो बार लिखने के लिए मजबूर किया जाता है - एक बार विशेषता के साथ, और एक बार बिना। यह काम करता है, हालांकि, अगर आप बदसूरती का बुरा नहीं मानते हैं।

#If Not Debug Then
    <RequireHttps()> _
    Function SomeAction() As ActionResult
#Else
    Function SomeAction() As ActionResult
#End If
        ...
    End Function

अपडेट २

कई लोगों ने RequireHttpsAttributeउदाहरण प्रस्तुत किए बिना व्युत्पन्न होने का उल्लेख किया है , इसलिए यहां आपके लिए एक है। मुझे लगता है कि सशर्त संकलन दृष्टिकोण की तुलना में यह दृष्टिकोण बहुत साफ होगा, और यह आपकी स्थिति में मेरी प्राथमिकता होगी।

अस्वीकरण: मैंने इस कोड का परीक्षण नहीं किया है, यहां तक ​​कि थोड़ा सा भी, और मेरा VB काफी कठोर है। मुझे केवल इतना पता है कि यह संकलन करता है। मैंने इसे स्पॉट, क्वीन 3 और लांस फिशर के सुझावों के आधार पर लिखा था। यदि यह काम नहीं करता है, तो इसे कम से कम सामान्य विचार व्यक्त करना चाहिए, और आपको शुरुआती बिंदु देना चाहिए।

Public Class RemoteRequireHttpsAttribute
    Inherits System.Web.Mvc.RequireHttpsAttribute

    Public Overrides Sub OnAuthorization(ByVal filterContext As  _
                                         System.Web.Mvc.AuthorizationContext)
        If IsNothing(filterContext) Then
            Throw New ArgumentNullException("filterContext")
        End If

        If Not IsNothing(filterContext.HttpContext) AndAlso _
            filterContext.HttpContext.Request.IsLocal Then
            Return
        End If

        MyBase.OnAuthorization(filterContext)
    End Sub

End Class

मूल रूप से, यदि वर्तमान अनुरोध स्थानीय है (यानी, आप लोकलहोस्ट के माध्यम से साइट पर पहुंच रहे हैं), तो डिफ़ॉल्ट डीएसएल प्राधिकरण कोड को चलाने के बजाय नई विशेषता बस समाप्त हो जाती है। आप इसे इस तरह से उपयोग कर सकते हैं:

<RemoteRequireHttps()> _
Public Class SomeController

    <RemoteRequireHttps()> _
    Public Function SomeAction() As ActionResult
        ...
    End Function

End Class

बहुत क्लीनर! बशर्ते मेरा अन-टेस्टेड कोड वास्तव में काम करता हो।


धन्यवाद, उम, मेरे लिए मेरे पोस्ट का संपादन, जैक। आपका प्रश्न C # में था, इसलिए मैंने C # प्रतिक्रिया पोस्ट की। मुझे नहीं पता था कि वीबी प्रासंगिक था। किसी को पता है कि क्या वीबी में विशेषताओं को नियंत्रित करने के लिए सशर्त संकलन का उपयोग करने का एक तरीका है, या क्या यह संभव नहीं है?
जोएल म्यूएलर

हां, यह C # के लिए काम करता है, और यह VB के लिए भी काम करता है, लेकिन आपको फंक्शन या क्लास डेफिनेशन की कुछ बदसूरत नकल करनी होगी। ऊपर मेरा अद्यतन जवाब देखें।
जोएल म्यूएलर

माफ़ करना। VB कोड के नमूने कठिन और कठिन होते जा रहे हैं। मुझे नहीं लगा कि यह मायने रखेगा। मैंने मूल प्रश्न अपडेट कर दिया है। विशेषताओं के आसपास सशर्त संकलन सी # में सुनिश्चित करने के लिए काम करते हैं? मैंने परीक्षण नहीं किया है। यह एक सही, सुरुचिपूर्ण समाधान की तरह लगता है।
ज़ैक पीटरसन

आपका RemoteRequireHttpsAttribute कोड पूरी तरह से काम करता है। सशर्त संकलन की तुलना में वीबी के लिए यह अधिक सुरुचिपूर्ण है। धन्यवाद फिर से योएल।
ज़ैक पीटरसन

2
धन्यवाद-- यह वही था जो मुझे चाहिए था। चीयर्स!
davecoulter

65

अगर किसी को C # संस्करण की आवश्यकता है:

using System;
using System.Web.Mvc;

namespace My.Utils
{
    public class MyRequireHttpsAttribute : RequireHttpsAttribute
    {
        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (filterContext == null)
            {
                throw new ArgumentNullException("filterContext");
            }

            if (filterContext.HttpContext != null && filterContext.HttpContext.Request.IsLocal)
            {
                return;
            }

            base.OnAuthorization(filterContext);
        }
    }
}

ठीक जब पढ़ने इस और इस एक सुरक्षा उपाय के रूप में हम जोड़ने चाहिए filters.Add(new MyRequireHttpsAttribute ());में FilterConfig?
शाइजुत

इस उत्तर के आधार पर, मैंने स्टार्टअप में किसी भी फ़िल्टर का उपयोग करके MVC 6 के लिए एक समाधान बनाया । नियंत्रक पर या विशेषता शैली।
निक निबलिंग

26

आवश्यकताएँ से व्युत्पन्न करना एक अच्छा तरीका है।

समस्या को पूरी तरह से समाप्त करने के लिए, आप अपने स्थानीय मशीन पर स्वयं-हस्ताक्षरित प्रमाणपत्र के साथ IIS का उपयोग कर सकते हैं। आईआईएस बिल्ट-इन वेबसर्वर से तेज है, और आपको यह फायदा है कि आपके विकास का वातावरण उत्पादन की तरह है।

स्कॉट हैसेलमैन के पास वीएस2010 और आईआईएस एक्सप्रेस के साथ स्थानीय एचटीटीपीएस को लागू करने के कुछ तरीकों पर एक महान संसाधन है।


फिर - जब तक आप एक वाईफ़ाई वाईफ़ाई Verizon डिवाइस के साथ पोर्ट अग्रेषण करने की कोशिश करते हैं और पाते हैं कि पोर्ट 443 आगे के लिए उपलब्ध नहीं है !!! # * & # * & $
Simon_Weaver

एक स्व-हस्ताक्षरित प्रमाण पत्र के साथ आपके स्थानीय मशीन पर आईआईएस का उपयोग करने के बारे में मुझे क्या पसंद नहीं है, यह है कि मुझे परिवर्तनों के परीक्षण के लिए तैनाती के एक अतिरिक्त चरण से गुजरना होगा। मुझे लगता है कि यदि आप सुरक्षा से संबंधित किसी चीज़ का परीक्षण कर रहे हैं तो इससे कोई मतलब नहीं है, लेकिन यह कहें कि यदि आप कुछ अन्य छोटे बदलावों की जाँच कर रहे हैं, तो HTTPS का समर्थन करने के लिए कैसिनी की अक्षमता के चारों ओर बस पाने के लिए तैनात करना एक दर्द है।
davecoulter

1
@davecoulter - विंडोज़ के क्लाइंट संस्करणों पर IIS एक्सप्रेस का उपयोग करें, किसी कैसिनी की आवश्यकता नहीं है और यह बिल्कुल एसएसएल की तरह काम करेगा, जिसमें एसएसएल क्षमता भी शामिल है।
एरिक फनकेनबस

@ मिस्टर मैन - हाँ, मुझे उस टिप्पणी के बाद से पता चला है। टिप के लिए धन्यवाद :)
davecoulter

ऐसी चीजों को करने के बारे में अधिक जानकारी या लिंक जोड़ा जाना चाहिए।
स्टेफेनबेयर

12

MVC फ़िल्टर सिस्टम और Global.asax.cs का लाभ उठाते हुए, मुझे लगता है कि आप ऐसा कर सकते हैं ...

    protected void Application_Start()
    {
      RegisterGlobalFilters(GlobalFilters.Filters);
    }

    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
      filters.Add(new HandleErrorAttribute());
      if(Config.IsProduction) //Some flag that you can tell if you are in your production environment.
      {
        filters.Add(new RequireHttpsAttribute());
      }
    }

मैं इस उत्तर को पसंद करता हूं क्योंकि इसमें एक नया फ़िल्टर लागू करने के बजाय प्रति एप्लिकेशन एक चेक शामिल है, जिसे हर एक अनुरोध के साथ निष्पादित किया जा रहा है।
अब्दुलहमीद

10

जैसा कि यह ASP.Net डेवलपमेंट सर्वर था जो आपकी समस्या का कारण बना, यह ध्यान देने योग्य है कि Microsoft के पास अब IIS एक्सप्रेस है , जो विज़ुअल स्टूडियो (VS2010 SP1 के बाद से) के साथ जहाज करता है। यह IIS का एक कट-डाउन संस्करण है जो विकास सर्वर के रूप में उपयोग करना आसान है, लेकिन SSL सहित IIS 7.5 के पूर्ण सुविधा सेट का समर्थन करता है।

स्कॉट हैंसेलमैन के पास आईआईएस एक्सप्रेस में एसएसएल के साथ काम करने पर एक विस्तृत पोस्ट है ।


9

कैसे एक कस्टम विशेषता में आवश्यकताएं विशेषता को विरासत में मिला। फिर, अपने कस्टम विशेषता के अंदर, वर्तमान अनुरोध की IsLocal संपत्ति की जांच करें कि क्या स्थानीय मशीन से अनुरोध आ रहा है। यदि यह है, तो आधार कार्यक्षमता को लागू न करें। अन्यथा, आधार ऑपरेशन को कॉल करें।


4

यह मेरे लिए काम किया, MVC 6 (ASP.NET Core 1.0) । डिबग विकास में कोड की जाँच करता है, और यदि नहीं, तो ssl की आवश्यकता नहीं है। सभी संपादन Startup.cs में हैं

जोड़ें:

private IHostingEnvironment CurrentEnvironment { get; set; }

जोड़ें:

public Startup(IHostingEnvironment env)
{
    CurrentEnvironment = env;
}

संपादित करें:

public void ConfigureServices(IServiceCollection services)
{
    // additional services...

    services.AddMvc(options =>
    {
        if (!CurrentEnvironment.IsDevelopment())
        {
            options.Filters.Add(typeof(RequireHttpsAttribute));
        }
    });
}

3

यदि आप प्राप्त कर सकते हैं और ओवरराइड कर सकते हैं - तो करें। यदि आप नहीं कर सकते हैं - MVC स्रोतों के साथ आता है, तो बस स्रोतों को लें और अपना खुद का [ForceHttps] विशेषता बनाएं जो कि IsLocal की जांच करता है।


3

MVC 3 के लिए मैंने अपना स्वयं का फ़िल्टरप्रोडर जोड़ा (यहाँ पाए गए कोड के आधार पर: वैश्विक और सशर्त फ़िल्टर जो अन्य चीजों के बीच (स्थानीय उपयोगकर्ताओं के लिए डिबग जानकारी प्रदर्शित करना) सभी कार्यों को RequireHttpsAttributeकब से सजाएगा HttpContext.Request.IsLocal == false


या आप अनुरोध को स्थानीय होने पर इसे केवल वैश्विक फ़िल्टर संग्रह में सशर्त रूप से जोड़ सकते हैं। ध्यान दें कि यदि आप अनुरोध उपलब्ध नहीं हो सकते हैं तो ऐप को तुरंत शुरू करने के लिए सेट किया गया है, तो आप इसे एक चेक / कैच ब्लॉक में जांचना चाहते हैं।
tvanfosson

3

Aroud शोध के बाद, मैं IIS एक्सप्रेस और नियंत्रक वर्ग की OnAuthorization विधि (Ref # 1) के ओवरराइड के साथ इस मुद्दे को हल करने में सक्षम था। मैं हंसेलमैन (रेफ # 2) द्वारा सुझाए गए मार्ग के साथ भी गया हूं। हालाँकि, मैं दो कारणों से इन दो समाधानों से संतुष्ट नहीं था: 1. Ref # 1 का OnAuthorization केवल एक्शन स्तर पर काम करता है, नियंत्रक वर्ग स्तर पर नहीं। 2. Ref # 2 को सेटअप के लिए बहुत अधिक आवश्यकता होती है (Win7 SDK for makecert) ), netsh कमांड्स, और, पोर्ट 80 और पोर्ट 443 का उपयोग करने के लिए, मुझे VS2010 को एडमिनिस्ट्रेटर के रूप में लॉन्च करने की आवश्यकता है, जिसे मैं फॉलो करता हूं।

इसलिए, मैं इस समाधान के साथ आया, जो निम्न स्थितियों के साथ सादगी पर केंद्रित है:

  1. मैं कंट्रोलर क्लास या एक्शन लेवल पर EssentialHttps attbbute का उपयोग करने में सक्षम होना चाहता हूं

  2. मैं चाहता हूँ कि MVC HTTPS का उपयोग तब करना चाहिए जब आवश्यकताएँ विशेषता मौजूद है, और अनुपस्थित होने पर HTTP का उपयोग करें

  3. मैं विजुअल स्टूडियो को व्यवस्थापक के रूप में नहीं चलाना चाहता

  4. मैं किसी भी HTTP और HTTPS पोर्ट का उपयोग करने में सक्षम होना चाहता हूं जो IIS एक्सप्रेस द्वारा असाइन किया गया है (नोट # 1 देखें)

  5. मैं IIS एक्सप्रेस के स्व-हस्ताक्षरित SSL प्रमाणपत्र का पुन: उपयोग कर सकता हूं, और यदि मुझे अवैध SSL प्रॉम्प्ट दिखाई देता है तो मुझे कोई चिंता नहीं है

  6. मैं चाहता हूँ कि देव, परीक्षण और उत्पादन में एक ही कोड आधार और एक ही बाइनरी हो और अतिरिक्त सेटअप से स्वतंत्र हो (जैसे कि netsh, mmc सर्टिफिकेट स्नैप-इन, आदि का उपयोग करके) संभव के रूप में।

अब, जिस तरह से पृष्ठभूमि और स्पष्टीकरण के साथ, मुझे उम्मीद है कि यह कोड किसी को मदद करेगा और कुछ समय बचाएगा। मूल रूप से, एक बेसकंट्रोलर वर्ग बनाएं जो नियंत्रक से विरासत में मिले, और इस बेस क्लास से अपने नियंत्रक वर्गों को प्राप्त करें। जब से आपने इसे पढ़ा है, मैं मानता हूं कि आप जानते हैं कि इन्हें कैसे करना है। तो, खुश कोडिंग!

नोट # 1: यह एक उपयोगी फ़ंक्शन 'getConfig' के उपयोग से प्राप्त किया गया है (कोड देखें)

Ref # 1: http://puredotnetcoder.blogspot.com/2011/09/requirehttps-attribute-in-mvc3.html

Ref # 2: http://www.hanselman.com/blog/WorkingWithSSLAtDevelopmentTimeIsEasierWithIISExpress.aspx

========== बेसकंट्रोलर में कोड ===================

     #region Override to reroute to non-SSL port if controller action does not have RequireHttps attribute to save on CPU 
    // By L. Keng, 2012/08/27
    // Note that this code works with RequireHttps at the controller class or action level.
    // Credit: Various stackoverflow.com posts and http://puredotnetcoder.blogspot.com/2011/09/requirehttps-attribute-in-mvc3.html
    protected override void OnAuthorization(AuthorizationContext filterContext)
    {
        // if the controller class or the action has RequireHttps attribute
        var requireHttps = (filterContext.ActionDescriptor.ControllerDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Count() > 0 
                            || filterContext.ActionDescriptor.GetCustomAttributes(typeof(RequireHttpsAttribute), true).Count() > 0);
        if (Request.IsSecureConnection)
        {
            // If request has a secure connection but we don't need SSL, and we are not on a child action   
            if (!requireHttps && !filterContext.IsChildAction)
            {
                var uriBuilder = new UriBuilder(Request.Url)
                {
                    Scheme = "http",
                    Port = int.Parse(getConfig("HttpPort", "80")) // grab from config; default to port 80
                };
                filterContext.Result = this.Redirect(uriBuilder.Uri.AbsoluteUri);
            }
        }
        else
        {
            // If request does not have a secure connection but we need SSL, and we are not on a child action   
            if (requireHttps && !filterContext.IsChildAction)
            {
                var uriBuilder = new UriBuilder(Request.Url)
                {
                    Scheme = "https",
                    Port = int.Parse(getConfig("HttpsPort", "443")) // grab from config; default to port 443
                };
                filterContext.Result = this.Redirect(uriBuilder.Uri.AbsoluteUri);
            }
        }
        base.OnAuthorization(filterContext);
    }
    #endregion

    // a useful helper function to get appSettings value; allow caller to specify a default value if one cannot be found
    internal static string getConfig(string name, string defaultValue = null)
    {
        var val = System.Configuration.ConfigurationManager.AppSettings[name];
        return (val == null ? defaultValue : val);
    }

============== अंत कोड ================

Web.Release.Config में, HttpPort और HttpsPort को साफ़ करने के लिए निम्नलिखित जोड़ें (डिफ़ॉल्ट 80 और 443 का उपयोग करने के लिए)।

<appSettings>
<add key="HttpPort" value="" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
<add key="HttpsPort" value="" xdt:Transform="SetAttributes" xdt:Locator="Match(key)"/>
</appSettings>

3

एक समाधान आप उत्पादन के साथ-साथ विकास कार्य केंद्र पर उपयोग कर सकते हैं। यह web.config में एप्लिकेशन सेटिंग से आपके विकल्प पर आधारित है

<appSettings>
     <!--Use SSL port 44300 in IIS Express on development workstation-->
     <add key="UseSSL" value="44300" />
</appSettings>

यदि आप SSL को कुंजी को हटाने के लिए उपयोग नहीं करना चाहते हैं। यदि आप मानक एसएसएल पोर्ट 443 का उपयोग करते हैं, तो मूल्य निकालें या 443 निर्दिष्ट करें।

फिर आवश्यकता के कस्टम कार्यान्वयन का उपयोग करें ।अपनी स्थिति का ध्यान रखें। यह वास्तव में EssentialHttps से लिया गया है और शर्तों को जोड़ने के अलावा बेस पद्धति के समान कार्यान्वयन का उपयोग करता है।

public class RequireHttpsConditional : RequireHttpsAttribute
{
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
    {
        var useSslConfig = ConfigurationManager.AppSettings["UseSSL"];
        if (useSslConfig != null)
        {
            if (!string.Equals(filterContext.HttpContext.Request.HttpMethod, "GET", StringComparison.OrdinalIgnoreCase))
            {
                throw new InvalidOperationException("The requested resource can only be accessed via SSL.");
            }

            var request = filterContext.HttpContext.Request;
            string url = null;
            int sslPort;

            if (Int32.TryParse(useSslConfig, out sslPort) && sslPort > 0)
            {
                url = "https://" + request.Url.Host + request.RawUrl;

                if (sslPort != 443)
                {
                    var builder = new UriBuilder(url) {Port = sslPort};
                    url = builder.Uri.ToString();
                }
            }

            if (sslPort != request.Url.Port)
            {
                filterContext.Result = new RedirectResult(url);
            }
        }
    }
}

AccountController में लॉगऑन विधि को सजाने के लिए मत भूलना

[RequireHttpsConditional]
[HttpPost]
public ActionResult LogOn(LogOnModel model, string returnUrl)

और आपके लॉगऑन दृश्य में कुछ इस तरह से कि आप https पर फॉर्म पोस्ट कर सकें।

<% using (Html.BeginFormSecure("LogOn", "Account", new { ReturnUrl = Request.QueryString["ReturnUrl"] }, Request.IsSecureConnection, Request.Url)) { %>

मुझे यह त्रुटि मिल रही है: XMLHttpRequest m.XXX.com/Auth/SignIn लोड नहीं कर सकता । अनुरोधित संसाधन पर कोई 'एक्सेस-कंट्रोल-अनुमति-उत्पत्ति' हेडर मौजूद नहीं है। इसलिए मूल ' m.XXX.com ' को उपयोग की अनुमति नहीं है।
रंजीत कुमार नागरी

2

जैसा कि जोएल ने उल्लेख किया है कि आप #if !DEBUGनिर्देश का उपयोग करके संकलन को बदल सकते हैं ।

मुझे अभी पता चला है कि आप web.config फ़ाइल संकलन तत्व में DEBUG प्रतीक के मान को बदल सकते हैं। उम्मीद है की वो मदद करदे।


1

MVC 6 (ASP.NET Core 1.0):

उचित समाधान env.IsProduct () या env.IsDevelopment () का उपयोग करना होगा। उत्पादन में केवल https की आवश्यकता के बारे में इस उत्तर में कारण के बारे में और पढ़ें ।

नीचे संघनित उत्तर (डिजाइन निर्णयों के बारे में अधिक पढ़ने के लिए ऊपर लिंक देखें) 2 अलग-अलग शैलियों के लिए:

  1. Startup.cs - फ़िल्टर पंजीकृत करें
  2. बेसकंट्रोलर - विशेषता शैली

Startup.cs (फ़िल्टर फ़िल्टर करें):

public void ConfigureServices(IServiceCollection services)
{
    // TODO: Register other services

    services.AddMvc(options =>
    {
        options.Filters.Add(typeof(RequireHttpsInProductionAttribute));
    });
}

BaseController.cs (विशेषता शैली):

[RequireHttpsInProductionAttribute]
public class BaseController : Controller
{
    // Maybe you have other shared controller logic..
}

public class HomeController : BaseController
{
    // Add endpoints (GET / POST) for Home controller
}

RequireHttpsInProductionAttribute : ऊपर से इनहेरिट कस्टम विशेषता का उपयोग कर रहे दोनों RequireHttpsAttribute :

public class RequireHttpsInProductionAttribute : RequireHttpsAttribute
{
    private bool IsProduction { get; }

    public RequireHttpsInProductionAttribute(IHostingEnvironment environment)
    {
        if (environment == null)
            throw new ArgumentNullException(nameof(environment));
        this.IsProduction = environment.IsProduction(); 
    }
    public override void OnAuthorization(AuthorizationContext filterContext)
    {
        if (this.IsProduction)
            base.OnAuthorization(filterContext);
    }
    protected override void HandleNonHttpsRequest(AuthorizationContext filterContext)
    {
        if(this.IsProduction)
            base.HandleNonHttpsRequest(filterContext);
    }
}

1

यह मेरे लिए सबसे साफ तरीका था। मेरी App_Start\FilterConfig.csफाइल में। हालांकि अब रिलीज़ बिल्ड नहीं चल सकता।

... 
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
        if (!Web.HttpContext.Current.IsDebuggingEnabled) {
            filters.Add(new RequireHttpsAttribute());   
        }
        ...
}

वैकल्पिक रूप से, आप इसे केवल तभी सेट कर सकते हैं जब आपका कस्टम त्रुटि पृष्ठ चालू हो।

... 
public static void RegisterGlobalFilters(GlobalFilterCollection filters)
{
        if (Web.HttpContext.Current.IsCustomErrorEnabled) {
            filters.Add(new RequireHttpsAttribute());   
        }
        ...
}

यह एक आसान उपाय है जो MVC 5 :)
MWD

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.