Я пытаюсь отобразить представление 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);
Однако это разваливается, когда оно не вызывается из Controller
из-за отсутствия HttpContext
.Я пытался создать HttpContext вручную, но я получаю много ошибок и нулевых исключений глубоко в коде Microsoft Mvc, который чрезвычайно сложно отладить.Я пробовал библиотеки типа RazorLight , которые не соответствуют моим потребностям, потому что они не поддерживают должным образом директиву @inject
.Я думаю, что мое лучшее решение состоит в том, чтобы попробовать макет поддельного HttpContext / ControllerContext, чтобы передать его родному ViewEngine.Однако, когда я создаю новый DefaultHttpContext
, я получаю исключение NullReferenceException около здесь , но очень трудно отследить код и найти, откуда он поступает.
Есть ли способсоздать новый HttpContext?