J'essaie de créer un attribut personnalisé pour valider un état de session dans chaque méthode d'action de mon application MVC 5.ASP.NET MVC - Un argument attribut doit être une expression constante
Ceci est le code de l'attribut personnalisé.
[AttributeUsage(AttributeTargets.Method)]
public class CheckSession : ActionFilterAttribute
{
public string SessionKey { get; set; }
public override void OnActionExecuting(ActionExecutingContext filterContext)
{
if (filterContext.ActionParameters.ContainsKey(SessionKey))
{
string value = filterContext.ActionParameters[SessionKey] as string;
if ((string)filterContext.HttpContext.Session[value] == null)
{
var control = filterContext.Controller as Controller;
if (control != null)
{
filterContext.Result = new RedirectToRouteResult(
new System.Web.Routing.RouteValueDictionary
{
{"controller", "Home"},
{"action", "Error"},
{"area", ""}
}
);
}
}
else
{
base.OnActionExecuting(filterContext);
}
}
}
}
Les constantes pour les clés de session que j'utilise:
public static class SessionKeysConstants
{
public static readonly string SMSNotificationsSearchClient = "SMSNotificationsSearchClient";
}
Et j'utilise l'attribut personnalisé comme ceci:
[CheckSession(SessionKey = SessionKeysConstants.SMSNotificationsSearchClient)]
public ActionResult Index()
{
// You need a session to enter here!
return View("Index");
}
Et obtenir l'erreur suivante:
An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type
Je ne suis pas sous tiens pourquoi, j'utilise une constante et ne fonctionne que dans l'attribution d'une chaîne de valeur directement au paramètre SessionKey
.
Il devrait être 'chaîne const publique SMSNotificationsSearchClient = « SMSNotificationsSearchClient »,' (statique ne signifie pas constant) –
Il ne fonctionne pas, je reçois la même erreur. –
Ensuite, vous n'avez pas utilisé le code ci-dessus (je viens de le tester et son amende) –