Search code examples
asp.netasp.net-mvc-4asp.net-mvc-5tempdata

Unable to access TempData inside my HandleUnauthorizedRequest


I have created my own customization for the AuthorizeAttribute inside my asp.net mvc web application, and to be able to return the user to the current URL after login , i am trying to save the current URL inside a TempData and then redirect to the login action method ,as follow-

protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
        {
            if (!_authorize && !filterContext.HttpContext.Request.IsAjaxRequest())
            {
                var viewResult = new RedirectResult("/Account/Login");
                TempData["returnUrl"] = filterContext.HttpContext.Request.Url.PathAndQuery;


                filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;

                filterContext.Result = viewResult;
            }

but seesm that i can not reference TempData in this case, because the above code will raise the following error:-

The name 'TempData' does not exist in the current context

Can anyone advice please? Thanks


Solution

  • Try using controller base,

    filterContext.Controller.TempData["returnUrl"] = filterContext.HttpContext.Request.Url.PathAndQuery;
    

    Also TempData may behave unexpectedly in Authorize attribute as it lives only on one request cycle. If so use Session instead.