2012-07-07 12 views
5

मेरे पास कुछ एमवीसी 2 वेबसाइट है जिसमें बहुत सारे [RequireHttps] हैं।डीबगिंग के दौरान सभी विधियों के लिए [RequHttps] को अक्षम कैसे करें?

लेकिन जब मैं इसे डीबग करता हूं तो मुझे उनमें से कई को विभिन्न स्थानों (नियंत्रकों) में टिप्पणी करना पड़ता है। और जब कोड तैयार होता है तो मुझे सभी टिप्पणियों को हटाना होगा।

तो यह समय लगता है और कभी कभी मैं uncomment करने [RequireHttps] :)

मेरा प्रश्न है जो इस समस्या को हल करने के लिए सर्वोत्तम प्रथाओं है भूल गए?

धन्यवाद!

+1

बस जिज्ञासा से बाहर - तुम क्यों जगह में उन लोगों के साथ डिबग नहीं कर सकते? –

+2

यदि आप अभी भी बिल्ड-इन वीएस वेब सर्वर का उपयोग कर रहे हैं, तो आईआईएस एक्सप्रेस पर स्विच करें और आप w/SSL सक्षम डीबग कर सकते हैं: http://learn.iis.net/page.aspx/901/iis-express-faq/ –

+0

@ माइकलएडेनफील्ड: मुझे लगता है कि आपकी टिप्पणी का जवाब होने का हकदार है। यह शायद सबसे अच्छा जवाब हो सकता है।यह वास्तव में सवाल का जवाब नहीं दे रहा है, लेकिन मुझे लगता है कि यह अंतर्निहित समस्या को हल कर सकता है। – comecme

उत्तर

3

मैं #if (C# Reference) का उपयोग करें और एक डिबग था और विन्यास रिलीज चाहते हैं:

तो फिर तुम:

#if RELEASE 
    [RequireHttps] 
#endif 
void methodHere() 
{ 
... 
} 
1

उपयोग एक #if RELEASE ... #endif संरचना:

#if RELEASE 
    [RequireHttps] 
#endif 
void YourMethod() 
{ 
    ... 
} 
8

आप के लिए नहीं करना चाहते हैं प्रत्येक उपयोग के आसपास #if कथन टाइप करें, आप एक नई विशेषता बना सकते हैं जो डीबग बिल्ड में नो-ऑप है, और रिलीज bu में RequireHttps का एक सरल सबक्लास ilds:

#if DEBUG 
public class ReleaseRequireHttpsAttribute : Attribute 
{ 
    // no-op 
} 
#elif 
public class ReleaseRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    // does the same thing as RequireHttpsAttribute 
} 
#endif 

तो बस लगता है और बदलें [ReleaseRequireHttps] के साथ हर [RequireHttps] और प्रयोग है कि नए तरीकों के लिए।

2

निम्नलिखित सूखी कार्यक्षमता अप करने के लिए आप की अनुमति है और पूर्व प्रोसेसर निर्देशों के साथ अपने नियंत्रकों को प्रदूषित करने के लिए आवश्यकता नहीं कर पाएगा:

public class CustomRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    /* override appropriate method with preprocessor directives */ 
} 

[CustomRequireHttps] 
public ActionResult Foo(string foo) { /* ... */ } 

[CustomRequireHttps] 
public ActionResult Bar(string bar) { /* ... */ } 
4

चूंकि आप इस को हल करने के लिए "सर्वोत्तम प्रथाओं" के बारे में पूछा समस्या, इस मामले में सबसे अच्छा अभ्यास गुणों को जगह में छोड़ना है और आपके द्वारा तैनात किए गए सटीक कोड को डीबग करना है। अन्य सभी उत्तरों (जिनमें से सभी काम करेंगे) का अर्थ यह होगा कि आप डिबगिंग कोड हैं, फिर तैनात करने से पहले अपना कोड बदलना, जो कभी भी एक अच्छा विचार नहीं है।

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

http://learn.iis.net/page.aspx/901/iis-express-faq/

एक बार स्थापित है, तो आप आईआईएस एक्सप्रेस का उपयोग करने के लिए अपनी परियोजनाओं को बदल सकते हैं, की स्थापना की एक https आईआईएस एक्सप्रेस विन्यास में बाध्यकारी है, और के रूप में सामान्य से निकलते हैं।

0

यहाँ कि HTTPS कनेक्शन की आवश्यकता है जब तक कि विजुअल स्टूडियो डीबगर के अंतर्गत चल कस्टम विशेषता का एक काम संस्करण है:

/// <summary> 
/// Requires HTTPS connection unless running under Visual Studio debugger. 
/// </summary> 
public class RemoteRequireHttpsAttribute : RequireHttpsAttribute 
{ 
    public override void OnAuthorization(AuthorizationContext filterContext) 
    { 
     if (filterContext != null 
      && filterContext.HttpContext != null 
      && filterContext.HttpContext.Request.IsLocal) 
      return; 

     base.OnAuthorization(filterContext); 
    } 
} 
संबंधित मुद्दे