在.NET Core 3.0中以字符串形式返回视图

问题描述

我正在生成HTML以发送给PDF生成器,并在Stackoverflow上发现了此this question。它指向Paris Polyzos和他的article。在.Net Core 3.0中实现代码后,出现以下错误

Cannot resolve scoped service 'Microsoft.AspNetCore.Mvc.ViewFeatures.Buffers.IViewBufferScope' from root provider.

有人对如何解决这个问题有任何想法吗?

解决方法

由于您需要将HTML视图呈现为字符串,因此我也遇到了同样的问题。我设法通过使用IServiceScopeFactory解决了它。您需要注入一个IServiceScopeFactory(例如,通过构造函数),然后使用该实例通过CreateScope()方法创建一个范围,然后将该范围的ServiceProvider馈送到HttpContext RequestServices属性。例如:

class MyRendererService
{
   private readonly IServiceScopeFactory _serviceScopeFactory {get; set;}
   
   public MyRendererService(IServiceScopeFactory serviceScopeFactory)
   {
     _serviceScopeFactory = serviceScopeFactory;
   }

   public void MyRenderingMethod()
   { 
      using (var scope = _serviceScopeFactory.CreateScope())
      {
         
         var httpContext = new DefaultHttpContext() { RequestServices = scope.ServiceProvider };

         // The rest of your Html rendering code here...
      }
      
   }
}

我知道自一个多月前您提出此问题以来,您可能已经解决了该问题,但这也可能对其他人有所帮助。