2012-07-07 21 views
5

Tengo un sitio web MVC2 que tiene un montón de [RequireHttps].Cómo deshabilitar [RequireHttps] para todos los métodos durante la depuración?

Pero cuando lo depuro tengo que comentar muchos de ellos en diferentes lugares (controladores). Y cuando el código está listo, tengo que eliminar todos los comentarios.

por lo que toma tiempo y, a veces se me olvidó quitar los comentarios :) [RequireHttps]

Mi pregunta es que es las mejores prácticas para resolver este problema?

¡Gracias!

+1

sólo por curiosidad - ¿por qué no se puede depurar con ellos en su lugar? –

+2

si todavía está utilizando el servidor web incorporado de VS, cambie a IIS Express y puede depurar con SSL habilitado: http://learn.iis.net/page.aspx/901/iis-express-faq/ –

+0

@MichaelEdenfield: Creo que su comentario merece ser una respuesta. Bien podría ser la mejor respuesta.En realidad, no responde la pregunta, pero creo que podría resolver el problema subyacente. – comecme

Respuesta

3

que haría uso de #if (C# Reference) y tenía una depuración y liberación de configuración:

continuación:

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

uso de una estructura #if RELEASE ... #endif:

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

Si no desea escriba #if sentencias sobre cada uso, puede crear un nuevo atributo que no sea operativo en las compilaciones de depuración, y una subclase simple de RequireHttps en la versión bu ILD:

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

Después, simplemente de buscar y reemplazar cada [RequireHttps] con [ReleaseRequireHttps] y el uso que para los nuevos métodos.

2

Lo siguiente le permitirá a SECO la funcionalidad y evitar la necesidad de contaminar los controladores con las directivas de pre-procesador:

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

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

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

Puesto que usted preguntará sobre "mejores prácticas" para resolver este problema, la mejor práctica en este caso es dejar los atributos en su lugar y depurar exactamente el mismo código que implementa. Cualquiera de las otras respuestas (todas funcionarán) significará que está depurando el código y luego cambiando su código antes de implementarlo, lo cual nunca es una buena idea.

En este caso, es bastante fácil depurar proyectos web a través de SSL si usa IIS Express. Este es un reemplazo directo para el servidor web de Visual Studio 2010, pero con la mayoría de las características de IIS, incluido el soporte HTTP seguro. Más información se puede encontrar aquí:

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

Una vez instalado, puede cambiar sus proyectos a utilizar IIS Express, establecer un enlace HTTPS en la configuración de IIS Express, y paso a través de la forma habitual.

0

Aquí hay una versión de trabajo del atributo personalizado que requiere conexión HTTPS a menos que se ejecuta en depurador de 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); 
    } 
} 
Cuestiones relacionadas