【发布时间】:2017-04-20 09:02:35
【问题描述】:
我有一个用 .net Core mvc6 编写的项目。我有一个“HideExeptionsMiddleware”,作为最后的手段,它的目标是捕获控制器中未处理的抛出异常,并将用户重定向到错误页面。中间件还记录异常,并为错误生成一个唯一 ID。 我的目标是将该 ID 与其他“ViewBag”变量一起传递给 Error.chtml 文件,而不重定向响应!
我的解决方案是将 .chtml 文件呈现为字符串,然后使用 来自中间件的 Response.WriteAsync。
我知道这是一个以前被问过的问题,但找到的常见解决方案是 使用 RazorEngine (https://antaris.github.io/RazorEngine/),但它接缝处于非活动状态,并且在线示例/文档是一个更旧的版本,我无法使其工作。
很难相信没有一个简单的解决方案,比如将路径传递给 chtml 文件,以及模型+viewbag 并返回字符串。
我错过了什么吗?
【问题讨论】:
-
我不太确定官方错误处理程序中间件到底做了什么,但它提供了重写请求的能力,这意味着它不会重定向。相反,它只是使用另一个 URL 再次执行中间件堆栈。我认为这也是你可以做的事情。这会更容易,因为您可以在查询参数中传递参数并让 MVC 找出它们。
-
更改路径并再次调用上下文是不可能的。我收到异常“标头已发送”。但即便如此,我也不想将错误 ID 传递给操作。
-
渲染视图需要控制器上下文,这在您的中间件中不可用。我认为
RazorEngine是一种方法。否则制作一个没有Razor的简单html。
标签: c# asp.net asp.net-core razorengine