ActionFilterAttribute - обратитесь к действиям определенного типа контроллера

Класс ControlPaint в Системе. Windows. Пространство имен форм имеет статические методы, Легкие и Темные:

public static Color Dark(Color baseColor, float percOfDarkDark);

Эти методы используют частную реализацию HLSColor. Мне жаль, что эта структура не была общедоступна и в Системе. Рисунок.

, С другой стороны, можно использовать GetHue, GetSaturation, GetBrightness на Цветной структуре для получения компонентов HSB. К сожалению, я не нашел обратную конверсию.

13
задан Peter J 17 September 2009 в 17:06
поделиться

2 ответа

Вы можете поместить ActionFilter в сам класс. Все действия в классе будут реализовывать ActionFilter.

[CustomAuthorize]
public class AuthorizedControllerBase : CustomControllerBase
{
}

public class OpenAccessControllerBase : CustomControllerBase
{
}

public class MyRealController : AuthorizedControllerBase 
{
    // GET: /myrealcontroller/index
    public ActionResult Index()
    {
        return View();
    }
}
16
ответ дан 1 December 2019 в 22:07
поделиться

Основываясь на комментариях и ограничениях моей системы, я выбрал гибридный подход. Обычно, если запрос проходит через кэшированный маршрут или «Пользователь» не установлен по какой-либо причине, аутентификация не выполняется надлежащим образом.

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;
  }
}
7
ответ дан 1 December 2019 в 22:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: