2012-07-07 10 views
5

Ich habe einige MVC2-Website, die eine Menge [RequireHttps] hat.Wie deaktiviert man [RequireHttps] für alle Methoden während des Debuggens?

Aber wenn ich es debuggen muss ich viele von ihnen an verschiedenen Orten (Controller) kommentieren. Und wenn der Code fertig ist, muss ich alle Kommentare löschen.

So braucht es Zeit, und manchmal habe ich vergessen [RequireHttps] :)

Meine Frage ist, welche Best Practices zu Kommentar- ist, dieses Problem zu lösen?

Vielen Dank!

+1

nur aus Neugier - warum kann man nicht mit ihnen debuggen vorhanden? –

+2

Wenn Sie weiterhin den integrierten VS-Webserver verwenden, wechseln Sie zu IIS Express, und Sie können debuggen, wenn SSL aktiviert ist: http://learn.iis.net/page.aspx/901/iis-express-faq/ –

+0

@MichaelEdenfield: Ich denke, dein Kommentar verdient eine Antwort zu sein. Es könnte die beste Antwort sein.Es beantwortet nicht wirklich die Frage, aber ich denke, dass es das zugrundeliegende Problem lösen könnte. – comecme

Antwort

3

ich #if (C# Reference) verwenden würde, und hatte eine Debug und Release-Konfiguration:

Dann Sie:

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

Verwenden Sie eine #if RELEASE ... #endif Struktur:

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

Wenn Sie nicht wollen Geben Sie #if Anweisungen für jede Verwendung ein, Sie können ein neues Attribut erstellen, das in Debug-Builds keine Fehler enthält, und eine einfache Unterklasse von 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 

Dann einfach finden und Ersetzen jedes [RequireHttps] mit [ReleaseRequireHttps] und verwenden, die nach neuen Methoden.

2

Im Folgenden können Sie auf DRY auf die Funktionalität und die Notwendigkeit verhindern, dass Ihr Controller mit Pre-Prozessor-Richtlinien verschmutzen:

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

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

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

Da Sie über „Best Practices“, fragte diese zur Lösung In diesem Fall besteht die beste Vorgehensweise darin, die Attribute an Ort und Stelle zu lassen und den exakt gleichen Code zu debuggen, den Sie bereitstellen. Jede der anderen Antworten (die alle funktionieren) bedeutet, dass Sie Code debuggen und dann Ihren Code vor der Bereitstellung ändern, was nie eine gute Idee ist.

In diesem Fall ist es einfach, Webprojekte über SSL zu debuggen, wenn Sie IIS Express verwenden. Dies ist ein Ersatz für den Visual Studio 2010-Webserver, jedoch mit den meisten Features von IIS, einschließlich sicherer HTTP-Unterstützung. Weitere Informationen finden Sie hier:

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

Einmal installiert, können Sie Ihre Projekte wechseln können IIS Express zu verwenden, eine HTTPS-Bindung in der IIS-Express-Konfiguration, und Schritt für Schritt durch als normal eingestellt.

0

Hier ist eine funktionierende Version von benutzerdefinierten Attribut, das HTTPS-Verbindung erfordert, es sei denn unter Visual Studio-Debugger ausgeführt wird:

/// <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); 
    } 
} 
Verwandte Themen