Editar: Desde ASP.NET MVC 4, el mejor enfoque es simplemente usar el atributo AllowAnonymous incorporado .
La respuesta a continuación se refiere a versiones anteriores de ASP.NET MVC
Puede crear un atributo de autorización personalizado heredado del AuthorizeAttribute estándar con un parámetro bool opcional para especificar si la autorización es necesaria o no.
public class OptionalAuthorizeAttribute : AuthorizeAttribute
{
private readonly bool _authorize;
public OptionalAuthorizeAttribute()
{
_authorize = true;
}
public OptionalAuthorizeAttribute(bool authorize)
{
_authorize = authorize;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
if(!_authorize)
return true;
return base.AuthorizeCore(httpContext);
}
}
Entonces puedes decorar tu controlador base con ese atributo:
[OptionalAuthorize]
public class ControllerBase : Controller
{
}
y para cualquier controlador que no desee autorización, simplemente use la anulación con un 'falso', por ejemplo
[OptionalAuthorize(false)]
public class TestController : ControllerBase
{
public ActionResult Index()
{
return View();
}
}