Я пытаюсь настроить свой атрибут Authorize, чтобы он перенаправлял пользователя на соответствующую страницу, если он не авторизован.
Это мой код до сих пор:
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;
}
}
Проблема в том,все, что я храню в Session или TempData в этом методе, теряется, когда пользователь прибывает в какой-либо метод действия в контроллере после того, как перенаправление выполнено из этого метода.Я проверил Session.Keys / TempData.Keys и т. Д. Но все значения потеряны.Возможно, что-то происходит в base.HandleUnauthorizedRequest(filterContext);
.Но я думаю, что вызов на базу важен.
Кто-нибудь может сказать мне точную причину этого поведения и как я могу предотвратить это?