J'essaie de personnaliser mon attribut Authorize pour qu'il redirige l'utilisateur vers la page appropriée s'il n'est pas autorisé.
C'est mon code jusqu'à présent :
public class CustomAuthorizationAttribute : AuthorizeAttribute
{
public string ErrorMessage { get; set; }
public string WebConfigKey { get; set; }
private const string UnauthorizedAccessMessage = "UnauthorizedAccessMessage";
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
HttpContext.Current.Session["foo"] = "bar";
base.HandleUnauthorizedRequest(filterContext);
if (string.IsNullOrEmpty(WebConfigKey))
throw new ArgumentNullException("WebConfigKey parameter is missing. WebConfigKey should give the actual page/url");
string configValue = ConfigurationManager.AppSettings[WebConfigKey];
if (string.IsNullOrEmpty(configValue))
throw new Exception(WebConfigKey + "'s value is null or empty");
if (!configValue.StartsWith("http"))
HttpContext.Current.Response.Redirect(WebUIUtils.GetSiteUrl() + configValue);
else
HttpContext.Current.Response.Redirect(configValue);
filterContext.Controller.TempData[UnauthorizedAccessMessage] = ErrorMessage;
HttpContext.Current.Session[UnauthorizedAccessMessage] = ErrorMessage;
}
}
Le problème est que tout ce que je stocke dans Session ou TempData dans cette méthode est perdu lorsque l'utilisateur arrive dans une méthode d'action dans le contrôleur après que la redirection a été faite à partir de cette méthode. J'ai vérifié Session.Keys/TempData.Keys etc. Mais toutes les valeurs sont perdues. Il se passe probablement quelque chose dans base.HandleUnauthorizedRequest(filterContext);
. Mais je suppose que l'appel à la base est important.
Quelqu'un peut-il me dire la raison exacte de ce comportement et comment l'empêcher de se produire ?