Asp.net core ASP.NET核心:用于在当前页面中显示异常消息的全局处理
在我的应用程序中,我有一组“预期”的错误,因此它们不应该在发生时将用户重定向到完整的错误页面。例如,我想在当前页面上方的红色框中显示错误消息 我可以很容易地捕捉到模型操作上的错误,并在当前视图上显示消息,但我想知道如何在全局范围内执行该操作 我尝试了一个带有TempData的自定义中间件和一个带有ModelState的过滤器,但是我不知道如何将错误数据传递回当前页面 这适用于单个模型(在TempData中设置错误数据):Asp.net core ASP.NET核心:用于在当前页面中显示异常消息的全局处理,asp.net-core,error-handling,Asp.net Core,Error Handling,在我的应用程序中,我有一组“预期”的错误,因此它们不应该在发生时将用户重定向到完整的错误页面。例如,我想在当前页面上方的红色框中显示错误消息 我可以很容易地捕捉到模型操作上的错误,并在当前视图上显示消息,但我想知道如何在全局范围内执行该操作 我尝试了一个带有TempData的自定义中间件和一个带有ModelState的过滤器,但是我不知道如何将错误数据传递回当前页面 这适用于单个模型(在TempData中设置错误数据): 通过@hiiru的提示,我对配置选项进行了一番白费力气的探索,以找到一个有
通过@hiiru的提示,我对配置选项进行了一番白费力气的探索,以找到一个有效的解决方案 我的问题是中间件HandleError方法缺少调用:
private void HandleError(HttpContext context, ApplicationError error) {
var tempData = _tempFactory.GetTempData(context);
tempData.Add("Error", error.Message);
tempData.Save(); // this call was missing
context.Response.Redirect(context.Request.Path);
}
将其弹出后,tempdata将与重定向一起发送回原始页面。请注意,这是使用默认的基于cookie的临时数据,因此不需要特定的配置
现在,这是可行的,但可能不是最好的方法。您的TempData是如何配置的?会话状态是否已启用?如果是,您的
启动顺序是什么?配置,是在添加应用程序错误中间件之前还是之后使用会话?感谢您更新解决方案!,我还学习了如何使用ITempDataDictionaryFactory
(我自己还不需要使用它)
public class ApplicationErrorMiddleware {
private readonly RequestDelegate _next;
private readonly ITempDataDictionaryFactory _tempFactory;
public ApplicationErrorMiddleware(RequestDelegate next, ITempDataDictionaryFactory tempFactory) {
_next = next;
_tempFactory = tempFactory;
}
public async Task InvokeAsync(HttpContext httpContext) {
try {
await _next(httpContext);
}
catch (ApplicationError ex) {
HandleError(httpContext, ex);
}
}
private void HandleError(HttpContext context, ApplicationError error) {
var tempData = _tempFactory.GetTempData(context);
tempData.Add("Error", error.Message);
context.Response.Redirect(context.Request.Path);
}
}
private void HandleError(HttpContext context, ApplicationError error) {
var tempData = _tempFactory.GetTempData(context);
tempData.Add("Error", error.Message);
tempData.Save(); // this call was missing
context.Response.Redirect(context.Request.Path);
}