Edycja: ponieważ ASP.NET MVC 4 najlepszym podejściem jest po prostu użycie wbudowanego atrybutu AllowAnonymous .
Poniższa odpowiedź dotyczy wcześniejszych wersji ASP.NET MVC
Można utworzyć niestandardowy atrybut autoryzacji dziedziczący po standardowym AuthorizeAttribute z opcjonalnym parametrem bool, aby określić, czy autoryzacja jest wymagana, czy nie.
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);
}
}
Następnie możesz ozdobić swój podstawowy kontroler tym atrybutem:
[OptionalAuthorize]
public class ControllerBase : Controller
{
}
a dla kontrolerów, których nie chcesz autoryzować, po prostu użyj zastąpienia z wartością „fałsz” - np
[OptionalAuthorize(false)]
public class TestController : ControllerBase
{
public ActionResult Index()
{
return View();
}
}