【发布时间】:2019-04-09 15:01:20
【问题描述】:
在我的自定义异常中间件中,我希望处理异常并返回具有用户友好消息的相同资源。
例如,当Account/Add 抛出SqlException 时,我返回Account/Add 响应,其中包含来自异常中间件的存储在TempData 中的消息。我已经
完成了这些视图引擎的工作。
我找到了this 扩展方法和用于此目的的用法,有了这个,您可以从中间件返回所有IActionResult 实现,很棒的扩展。
但是,我不知道如何返回位于我的视图文件夹中的常规视图,例如 Views/Account/Add
异常中间件
private readonly RequestDelegate _next;
public ExceptionHandler(RequestDelegate next)
{
_next = next;
}
public async Task Invoke(HttpContext context)
{
try
{
await _next.Invoke(context);
}
catch (Exception ex)
{
HandleException(context, ex);
}
}
private void HandleException(HttpContext context, Exception exception)
{
//handle exception, log it and other stuff...
//....
var result = new ViewResult
{
ViewName = context.Request.Path.ToString(),
};
//WithDanger is an extension method writes message to tempdata
result.WithDanger("Error", exception.ToString());
//Extension method
context.WriteResultAsync(result);
}
这是我尝试过的,但它没有按预期工作,它返回一个空白页面,似乎它没有使剃刀视图引擎运行以构建我的请求页面。
如何让我的中间件使用我现有的视图正确返回 ViewResult?
【问题讨论】:
标签: razor asp.net-core-mvc asp.net-core-2.1