我有一个用.net核心mvc6写的项目。我有一个"HideExeptionsMiddleware",它的目标是捕捉抛出的异常,这些异常没有在控制器中处理,作为最后的手段,并将用户重定向到错误页面。中间件还记录exeptions,并为错误生成唯一的ID。我的目标是将该ID和其他"ViewBag“变量一起传递给Error.chtml文件,而不重定向响应!
我想要的解决方案是将.chtml文件呈现为一个字符串,并从中间件使用Response.WriteAsync。
我知道这是一个以前被问过的问题,但常见的解决方案是使用RazorEngine (https://antaris.github.io/RazorEngine/),但它看起来不活跃,并且在线示例/文档是一个更老的版本,我无法使其工作。
很难相信没有一个简单的解决方案,像传递一个路径到chtml文件,和model+viewbag一起,然后拿回一个字符串。
我是不是遗漏了什么?
发布于 2017-04-21 00:16:49
已经有一个由ASP.NET核心提供的中间件来处理这种情况。可以在您的IApplicationBuilder实例上使用UseStatusCodePagesWithReExecute扩展来访问它。
其思想是使用专门用于错误处理的路由来配置此中间件,该路由将返回配置的错误视图和技术信息。
在Startup的Configure方法中:
...
app.UseStatusCodePagesWithReExecute("/error/{0}");
...然后定义一个ErrorController:
[Route("error")]
public class ErrorController : Controller
{
[HttpGet("{status?}")]
public IActionResult Index(int? status = null)
{
ViewBag.RequestId = HttpContext.TraceIdentifier;
return this.View();
}
}https://stackoverflow.com/questions/43514908
复制相似问题