gpt4 book ai didi

.net - 无法通过ExceptionFilter传递TempData值

转载 作者:行者123 更新时间:2023-12-03 07:52:21 25 4
gpt4 key购买 nike

.Net Core 3.1

我有一个ExceptionFilter,我想在其中传递带有RedirectResult的TempData值。

这是我的代码如下:

public class CustomExceptionFilterAttribute : IExceptionFilter
{
private readonly ITempDataProvider _tempDataProvider;

public CustomExceptionFilterAttribute(ITempDataProvider tempDataProvider)
{
_tempDataProvider = tempDataProvider;
}

public void OnException(ExceptionContext context)
{
//Log The Exception here

//After Log
var url = context.HttpContext.Request.Path.ToUriComponent();
context.ExceptionHandled = true;
context.HttpContext.Response.Clear();

var tempData = new TempDataDictionary(context.HttpContext, _tempDataProvider);
tempData.Add("UserFriendlyMessage", "An Error Occured! Please contact Admin!");
tempData.Keep("UserFriendlyMessage"); //This didn't work either...

var result = new RedirectResult(url);
context.Result = result;
}
}
[TypeFilter(typeof(CustomExceptionFilterAttribute))]
public class MyController : Controller
{...
public IActionResult MyAction()
{
return View();
}
[HttpPost]
public IActionResult MyAction(MyModel model)
{
try
{
int a = 5;
int b = a / 0;
}
catch(Exception ex)
{

}
return View();
}

因此,如您在上面看到的,我的 目的是将用户重定向到同一页面(发生异常的地方),并防止他们重定向500StatusCode错误页面。

实际上,此代码将用户重定向为我想要的方式,但是 TempData 值未传递。

我试过了:
- context.HttpContext.Response.Clear();尝试过此代码,但没有此代码。
- tempData.Keep("UserFriendlyMessage");尝试过此代码,但没有此代码。

最佳答案

我已经弄清楚了,希望对遇到这种情况的人有所帮助。

我已经删除了ITempDataProvider,而改为添加了ITempDataDictionaryFactory

public class CustomExceptionFilterAttribute : IExceptionFilter
{
private readonly ITempDataDictionaryFactory _tempDataFactory;

public CustomExceptionFilterAttribute(ITempDataDictionaryFactory tempDataFactory)
{
_tempDataFactory = tempDataFactory;
}

public void OnException(ExceptionContext context)
{
//Log The Exception here

//After Log
var url = context.HttpContext.Request.Path.ToUriComponent();
context.ExceptionHandled = true;
context.HttpContext.Response.Clear();

//-----------THIS WAS THE PART THAT HAS PROBLEM----------------
//var tempData = new TempDataDictionary(context.HttpContext, _tempDataProvider);
//tempData.Add("UserFriendlyMessage", "An Error Occured! Please contact Admin!");
//tempData.Keep("UserFriendlyMessage"); //This didn't work either...
//var result = new RedirectResult(url);
//context.Result = result;
//-------------------------------------------------------------

//I've changed it to:
var tempData = _tempDataDictionaryFactory.GetTempData(context.HttpContext);
tempData.Add("UserFriendlyMessage", "An Error Occured!");

var result = new RedirectResult(url);
context.Result = result;
}
}

注意:因此,我认为错误的部分是我使用 new TempDataDictionary创建了一个TempData的新实例,现在我使用的是 当前的 TempData,
如果有人知道我在做什么错,请告诉我。 :)

关于.net - 无法通过ExceptionFilter传递TempData值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61839511/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com