Аутентификация cookie-файлов MVC Owin - переопределение генерации ReturnUrl
У меня есть приложение MVC, использующее Autin Cookie Authentication. У меня SlidingExpiration включен и работает. Однако, когда срок действия логина пользователя истекает и он отправляется обратно в LoginPath, ReturnUrl вызывает у меня некоторые проблемы:
Я только хочу, чтобы ReturnUrl был включен, если он указывает на действие GET,не действие POST.Я хотел бы включить PathAndQuery вместо просто Path, чтобы я мог повторно заполнить любые элементы, которые пользователь мог заполнить в форме.Я попытался создать свой собственный AuthorizeAttribute (код ниже) и применить его к некоторым методам в одном из моих контроллеров, но кажется, что по истечении сеанса он никогда не срабатывает.
public class CheckLoginExpirationFilter : AuthorizeAttribute
{
public override void OnAuthorization(AuthorizationContext filterContext)
{
base.OnAuthorization(filterContext);
if (filterContext.Result is HttpUnauthorizedResult)
{
string returnUrl = null;
if (filterContext.HttpContext.Request.HttpMethod.Equals("GET", StringComparison.CurrentCultureIgnoreCase))
returnUrl = filterContext.HttpContext.Request.Url.GetComponents(UriComponents.PathAndQuery, UriFormat.SafeUnescaped);
filterContext.Result = new RedirectToRouteResult(new RouteValueDictionary()
{
{ "client", filterContext.RouteData.Values[ "client" ] },
{ "controller", "Security" },
{ "action", "Login" },
{ "ReturnUrl", returnUrl }
});
}
}
}
ответ на связанный вопрос указывает, что пользовательский атрибут AuthorizeAttribute является «стандартным [решением], когда вы хотите переопределить это поведение», но я не могу заставить его работать.