.Net core controller tempdata add/remove

134 Views Asked by At

Implementing ExceptionFilterAttribute OnException method and need to redirect The old implementation (.Net 48) was

exceptionContext.Controller.TempData.Remove(""); 
exceptionContext.Controller.TempData.Add("");//exception message is added
exceptionContext.Controller.ControllerContext.HttpContext.Response.Redirect(url);

For the redirect I guess I can:

exceptionContext.HttpContext.Response.Redirect(url);//Is this correct?

Please suggest alternate for the remove and add?

1

There are 1 best solutions below

2
Ruikai Feng On BEST ANSWER

In .net 6,there's no exceptionContext.Controller.TempData if you want to access TempData in your ExceptionFilter,you could try to inject the TempdataDictionaryFactory into the filter

For example, I tried as below:

public class MyExceptionFilter : ExceptionFilterAttribute
    {
        private readonly ITempDataDictionaryFactory _tempDataDictionaryFactory;




        public MyExceptionFilter(ITempDataDictionaryFactory tempDataDictionaryFactory)
        {
            _tempDataDictionaryFactory = tempDataDictionaryFactory;
        }



       public override void OnException(ExceptionContext context)
        {
            var tempData = _tempDataDictionaryFactory.GetTempData(context.HttpContext);
            tempData.Add("key", "value");
            
            context.Result = new RedirectToActionResult("Error", "Home", null);
        }
    }

in Program.cs:

builder.Services.AddControllersWithViews(x=>x.Filters.Add(typeof(MyExceptionFilter)));

The Result:

enter image description here