我有一个用.net Core mvc6编写的项目。我有一个“HideExeptionsMiddleware”,其目标是捕获未在控制器中处理的抛出异常,作为最后的手段,并将用户重定向到错误页面。中间件还会记录exeptions,并为错误生成唯一ID。 我的目标是将该ID以及其他“ViewBag”变量传递给Error.chtml文件,而不重定向响应!
我想要的解决方案是将.chtml文件呈现为字符串,然后使用 来自中间件的Response.WriteAsync。
我知道它之前曾被问过的问题,但找到的常见解决方案是
使用RazorEngine(pageAction
api),但它接收处于活动状态,在线/文档的示例版本较旧,我无法使其正常工作。
很难相信没有简单的解决方案,例如将路径传递给chtml文件,以及模型+ viewbag并返回字符串。
我错过了什么吗?
答案 0 :(得分:3)
已经存在ASP.NET Core提供的中间件来处理这种情况。可以访问UseStatusCodePagesWithReExecute
实例上的IApplicationBuilder
扩展名
我们的想法是使用专用于错误处理的路由配置此中间件,该路由将返回带有技术信息的已配置错误视图。
在您的初创公司的配置方法中:
...
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();
}
}