Cela n'aidera pas si vous exécutez les builds Release sur votre station de travail de développement, mais la compilation conditionnelle pourrait faire l'affaire...
#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()
{
}
}
Mise à jour
En Visual Basic, les attributs font techniquement partie de la même ligne que la définition à laquelle ils s'appliquent. Vous ne pouvez pas insérer de déclarations de compilation conditionnelle à l'intérieur d'une ligne, ce qui vous oblige à écrire la déclaration de fonction deux fois - une fois avec l'attribut et une fois sans. Mais cela fonctionne, si vous n'êtes pas gêné par la laideur.
#If Not Debug Then
<RequireHttps()> _
Function SomeAction() As ActionResult
#Else
Function SomeAction() As ActionResult
#End If
...
End Function
Mise à jour 2
Plusieurs personnes ont mentionné le fait de dériver de RequireHttpsAttribute
sans fournir d'exemple, alors en voici un pour vous. Je pense que cette approche serait beaucoup plus propre que l'approche de la compilation conditionnelle, et ce serait ma préférence dans votre position.
AVERTISSEMENT : Je n'ai pas testé ce code, même un tout petit peu, et mon VB est assez rouillé. Tout ce que je sais, c'est qu'il compile. Je l'ai écrit en me basant sur les suggestions de spot, queen3, et Lance Fisher. S'il ne fonctionne pas, il devrait au moins transmettre l'idée générale, et vous donner un point de départ.
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
En gros, le nouvel attribut s'arrête au lieu d'exécuter le code d'autorisation SSL par défaut, si la requête en cours est locale (c'est-à-dire si vous accédez au site via localhost). Vous pouvez l'utiliser comme suit :
<RemoteRequireHttps()> _
Public Class SomeController
<RemoteRequireHttps()> _
Public Function SomeAction() As ActionResult
...
End Function
End Class
Beaucoup plus propre ! A condition que mon code non testé fonctionne réellement.