Как передать значение флага в фильтр пользовательских действий в Asp.net MVC

У меня есть метод действия с пользовательским атрибутом фильтра действий «FeatureAuthenticationAttribute», я хочу передать значение флага фильтру;

Если значение передаваемого флага ложно, оно должно перенаправляться на метод действия FeatureDenied. Для этого:

[FeatureAuthenticationAttribute(flagvalue)]
public ActionResult Jobs()
{
    return View();
}

public ActionResult FeatureDenied()
{
    return View();
}

Для фильтра:

[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
public class FeatureAuthenticationAttribute : FilterAttribute, IAuthorizationFilter
{
    public override void OnAuthorization (AuthorizationContext filterContext,bool flagvalue)
    {
        if (flagvalue== false) // I want to check here
        {
            string redirectURL = @"~/Employer/FeatureDenied";// Redirect to Action Method 

            filterContext.Result = new RedirectResult(redirectURL);
        }
    }
}

Возможно ли как указано выше? Если это так, я ударяю в атрибуте фильтра, как это реализовать или сделать. Помогите мне, пожалуйста.


person Sanjay    schedule 29.07.2014    source источник
comment
Откуда должно взяться это значение флага?   -  person Andrei    schedule 29.07.2014
comment
Значение флага поступает из базы данных, но это не проблема, я хочу проверить, является ли флаг истинным или ложным, если он ложный, то он должен перенаправляться на метод FeatureDenied Action.   -  person Sanjay    schedule 29.07.2014


Ответы (1)


Вы можете просто сделать такие данные маршрута в Controller :

RouteData.Values.Add("flag", true/false);

Фильтр:

 [AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = true)]
 public class FeatureAuthenticationAttribute : FilterAttribute, IAuthorizationFilter
 {
  public override void OnAuthorization (AuthorizationContext filterContext,bool flagvalue)
   {
        if (filterContext.RouteData.Values["flag"]== false) // I want to check here
        {

            string redirectURL = @"~/Employer/FeatureDenied";// Redirect to Action Method 

            filterContext.Result = new RedirectResult(redirectURL);

        }

    }
 }
person Kartikeya Khosla    schedule 29.07.2014
comment
просто поместите значение вашего флага из базы данных в данные маршрута, как показано в первой строке примера, а затем проверьте его значение в фильтре действий, как показано выше. Я думаю, что это должно сработать для вас.. @Chandu - person Kartikeya Khosla; 29.07.2014