2012-07-07 13 views
5

Ho qualche sito MVC2 che ha un sacco di [RequireHttps].Come disabilitare [RequireHttps] per tutti i metodi durante il debug?

Ma quando eseguo il debug, devo commentare molti di essi in diversi punti (controller). E quando il codice è pronto, devo cancellare tutti i commenti.

Quindi ci vuole tempo e qualche volta dimenticato di rimuovere il commento [RequireHttps] :)

La mia domanda è che è le migliori pratiche per risolvere questo problema?

Grazie!

+1

solo per curiosità - perché non si può eseguire il debug con loro in atto? –

+2

se si utilizza ancora il server Web VS incorporato, passare a IIS Express ed è possibile eseguire il debug con SSL abilitato: http://learn.iis.net/page.aspx/901/iis-express-faq/ –

+0

@ Michael Michael: Penso che il tuo commento meriti di essere una risposta. Potrebbe essere la migliore risposta.In realtà non sta rispondendo alla domanda, ma penso che potrebbe risolvere il problema di fondo. – comecme

risposta

3

Userei #if (C# Reference) e aveva un Debug e Release configurazione:

Poi:

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

Utilizzare un #if RELEASE ... #endif struttura:

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

Se non si desidera digita le dichiarazioni #if in base a ogni utilizzo, puoi creare un nuovo attributo che è un no-op nei build di debug e una sottoclasse semplice di RequireHttps in release bu ILDs:

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

Poi semplicemente trovare e sostituzione ogni [RequireHttps] con [ReleaseRequireHttps] e l'uso che per i nuovi metodi.

2

Di seguito vi permetterà di DRY la funzionalità ed evitare la necessità di inquinare i controller con le direttive di pre-processore:

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

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

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

Dal momento che lei ha chiesto di "best practice" per risolvere questo problema, la migliore pratica in questo caso è lasciare gli attributi sul posto ed eseguire il debug dello stesso codice esatto che si distribuisce. Tutte le altre risposte (che funzioneranno tutte) significano che si sta eseguendo il debug del codice, quindi si modifica il codice prima della distribuzione, il che non è mai una buona idea.

In questo caso, è facile eseguire il debug di progetti Web su SSL se si utilizza IIS Express. Questa è una sostituzione drop-in per il server Web di Visual Studio 2010, ma con la maggior parte delle funzionalità di IIS, incluso il supporto HTTP sicuro. Maggiori informazioni possono essere trovate qui:

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

Una volta installato, è possibile passare i vostri progetti per utilizzare IIS Express, configurare un binding HTTPS nella configurazione di IIS Express e scorrere normalmente.

0

Ecco una versione funzionante di attributo personalizzato che richiede la connessione HTTPS a meno che l'esecuzione in debugger di Visual Studio:

/// <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); 
    } 
} 
Problemi correlati