1 回答

TA貢獻1813條經驗 獲得超2個贊
一種選擇是將調用移動到BuildFile控制器的操作方法中,其中控制器上下文可用作名為的屬性ControllerContext。
如果您需要像示例中那樣手動創建控制器,則必須自己創建上下文。Derek Comartin 在他的博文中展示了在控制臺應用程序中使用 Razor(在 ASP.NET Core MVC 之外)如何為 ASP.Core 2 項目執行此操作。對于您的情況,請嘗試更改
pdfBytes = actionPDF.BuildFile(controller.ControllerContext);
至
pdfBytes = actionPDF.BuildFile(CreateDummyControllerContext("SiteSuperReports"));
使用以下方法:
private ControllerContext CreateDummyControllerContext(string controllerName)
{
var context = new ControllerContext
{
HttpContext = new DefaultHttpContext
{
RequestServices = GetServiceProvider()
},
RouteData = new RouteData
{
Values = {{"controller", controllerName}}
},
ActionDescriptor = new Microsoft.AspNetCore.Mvc.Controllers.ControllerActionDescriptor
{
RouteValues = new Dictionary<string, string>(),
}
};
return context;
}
// see https://codeopinion.com/using-razor-in-a-console-application/
private ServiceProvider GetServiceProvider()
{
var services = new ServiceCollection();
services.AddSingleton(PlatformServices.Default.Application);
var environment = new HostingEnvironment
{
ApplicationName = Assembly.GetEntryAssembly().GetName().Name
};
services.AddSingleton<IHostingEnvironment>(environment);
services.Configure<RazorViewEngineOptions>(options =>
{
options.FileProviders.Clear();
options.FileProviders.Add(new PhysicalFileProvider(Directory.GetCurrentDirectory()));
});
services.AddSingleton<ObjectPoolProvider, DefaultObjectPoolProvider>();
services.AddSingleton<DiagnosticSource>(new DiagnosticListener("Microsoft.AspNetCore"));
services.AddLogging();
services.AddMvc();
return services.BuildServiceProvider();
}
您可能需要添加 Microsoft.Extensions.PlatformAbstractions 包。
- 1 回答
- 0 關注
- 134 瀏覽
添加回答
舉報