Это то, что я в итоге сделал, и заключил его в повторно используемый атрибут, и самое главное, он сохраняет исходный URL при перенаправлении (или применении любого желаемого результата) в зависимости от ваших требований:
public class AuthoriseSiteAccessAttribute : ActionFilterAttribute
{
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
base.OnActionExecuting(filterContext);
// Perform your condition, or straight result assignment here.
// For me I had to test the existance of a cookie.
if (yourConditionHere)
filterContext.Result = new SiteAccessDeniedResult();
}
}
public class SiteAccessDeniedResult : ViewResult
{
public SiteAccessDeniedResult()
{
ViewName = "~/Views/SiteAccess/Login.cshtml";
}
}
Затем просто добавьте атрибут [SiteAccessAuthorise]
к вашим контроллерам, к которым вы хотите применить авторизационный доступ (в моем случае), или добавьте его в BaseController. Убедитесь, что хотя действие, которое вы перенаправляете на базовый контроллер, не имеет атрибута, иначе вы попадете в бесконечный цикл!