【发布时间】:2018-12-04 03:27:57
【问题描述】:
我正在尝试将 Razor 视图呈现为来自托管服务的字符串。通过使用IRazorViewEngine,我可以使用以下内容将视图呈现给字符串:
_viewEngine.FindView(actionContext, viewName, false);
var viewDictionary = new ViewDataDictionary(new EmptyModelMetadataProvider(), new ModelStateDictionary())
{
Model = model
};
var viewContext = new ViewContext(
actionContext,
viewResult.View,
viewDictionary,
new TempDataDictionary(actionContext.HttpContext, _tempDataProvider),
sw,
new HtmlHelperOptions()
);
viewContext.RouteData = httpContext.GetRouteData(); //set route data here
await viewResult.View.RenderAsync(viewContext);
但是,当由于缺少 HttpContext 而没有从 Controller 调用它时,它就会崩溃。我已经尝试手动构建一个 HttpContext,但是在 Microsoft Mvc 代码中我遇到了很多错误和空异常,这很难调试。我已经尝试过像 RazorLight 这样的库,它们不适合我的需要,因为它不能正确支持 @inject 指令。我认为我最好的解决方案是尝试模拟一个假的 HttpContext/ControllerContext 以传递给本机 ViewEngine。然而,当我创建一个新的DefaultHttpContext 时,我在here 附近得到一个 NullReferenceException,但是很难跟踪代码并找到它的来源。
有什么方法可以创建一个新的 HttpContext 吗?
【问题讨论】:
标签: c# asp.net-core asp.net-core-mvc httpcontext