Класс ControlPaint в Системе. Windows. Пространство имен форм имеет статические методы, Легкие и Темные:
public static Color Dark(Color baseColor, float percOfDarkDark);
Эти методы используют частную реализацию HLSColor. Мне жаль, что эта структура не была общедоступна и в Системе. Рисунок.
, С другой стороны, можно использовать GetHue, GetSaturation, GetBrightness на Цветной структуре для получения компонентов HSB. К сожалению, я не нашел обратную конверсию.
Вы можете поместить ActionFilter в сам класс. Все действия в классе будут реализовывать ActionFilter.
[CustomAuthorize]
public class AuthorizedControllerBase : CustomControllerBase
{
}
public class OpenAccessControllerBase : CustomControllerBase
{
}
public class MyRealController : AuthorizedControllerBase
{
// GET: /myrealcontroller/index
public ActionResult Index()
{
return View();
}
}
Основываясь на комментариях и ограничениях моей системы, я выбрал гибридный подход. Обычно, если запрос проходит через кэшированный маршрут или «Пользователь» не установлен по какой-либо причине, аутентификация не выполняется надлежащим образом.
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
private MyUser User { get; set; }
public override void OnAuthorization(AuthorizationContext filterContext)
{
//Lazy loads the user in the controller.
User = ((MyControllerBase)filterContext.Controller).User;
base.OnAuthorization(filterContext);
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool isAuthorized = false;
string retLink = httpContext.Request.Url.AbsolutePath;
if(User != null)
{
isAuthorized = User.IsValidated;
}
if (!isAuthorized)
{
//If the current request is coming in via an AJAX call,
//simply return a basic 401 status code, otherwise,
//redirect to the login page.
if (httpContext.Request.IsAjaxRequest())
{
httpContext.Response.StatusCode = 401;
}
else
{
httpContext.Response.Redirect("/login?retlink=" + retLink);
}
}
return isAuthorized;
}
}