Bearbeiten: Seit ASP.NET MVC 4 besteht der beste Ansatz darin, einfach das integrierte AllowAnonymous- Attribut zu verwenden.
Die folgende Antwort bezieht sich auf frühere Versionen von ASP.NET MVC
Sie können ein benutzerdefiniertes Autorisierungsattribut erstellen, das vom Standard-AuthorizeAttribute mit einem optionalen bool-Parameter erbt, um anzugeben, ob eine Autorisierung erforderlich ist oder nicht.
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);
}
}
Dann können Sie Ihren Basis-Controller mit folgendem Attribut dekorieren:
[OptionalAuthorize]
public class ControllerBase : Controller
{
}
und für alle Controller, für die Sie keine Autorisierung wünschen, verwenden Sie einfach die Überschreibung mit einem 'false' - z
[OptionalAuthorize(false)]
public class TestController : ControllerBase
{
public ActionResult Index()
{
return View();
}
}
[AllowAnonymous]
Attribut zu verwenden .Es scheint, dass ASP.NET MVC 4 dies durch Hinzufügen eines AllowAnonymous- Attributs 'behoben' hat .
David Hayden schrieb darüber :
quelle
Meine persönliche Einstellung dazu wäre, den Controller aufzuteilen. Erstellen Sie einfach einen anderen Controller. Für die Aktionen benötigen Sie keine Authentifizierung.
Oder Sie könnten haben:
BaseController
erfordert keine Authentifizierung - hier hast du all deine "Basissachen" :).
BaseAuthController : BaseController
Alle Aktionen hier erfordern eine Authentifizierung.
Auf diese Weise können Sie sich authentifizieren, wenn Sie möchten, indem Sie einfach von einer bestimmten Klasse ableiten.
quelle
Wenn Sie nur möchten, dass eine Aktion auf einem ansonsten autorisierten Controller nicht autorisiert wird, können Sie Folgendes tun:
quelle