Rotativa值不能为空。参数名称:上下文

时间:2019-01-15 21:30:08

标签: c# asp.net rotativa

我正在尝试使用Rotativa生成PDF并返回字节,但是出现错误:

  

值不能为null。参数名称:上下文

这是我的代码:

public string getReportsPDF(string community, string procedure)
{
    SiteSuperReportsController controller = new SiteSuperReportsController();

    string value = "";
    byte[] pdfBytes = new byte[] { };

    if (procedure == "GetProductionTasks")
    {
        var actionPDF = new Rotativa.ActionAsPdf("RedBluePDF", new { community = community, procedure = procedure })
        {
            PageSize = Size.A4,
            PageOrientation = Rotativa.Options.Orientation.Landscape,
            PageMargins = { Left = 1, Right = 1 }
        };
        try
        {
            pdfBytes = actionPDF.BuildFile(controller.ControllerContext);
            value = "Works";
        }
        catch(Exception e)
        {
            value = e.Message.ToString();
        }
    }
    return value;
}

返回的值为Value不能为空。参数名称:上下文

我在做什么错了?

1 个答案:

答案 0 :(得分:0)

一种选择是将对pipeline { agent any stages { stage('Example') { steps { sh ''' docker-compose exec -T cli drush status docker-compose exec -T cli curl http://nginx:8080 -v ''' } } } post { always { sh 'docker-compose down' } } } 的调用移动到控制器的操作方法中,在该方法中,控制器上下文可用作名为BuildFile的属性。

如果您需要像示例中那样手动创建控制器,则必须自己创建上下文。 Derek Comartin在他的博客文章Using Razor in a Console Application (outside of ASP.NET Core MVC)中展示了如何针对ASP.Core 2项目执行此操作。根据您的情况,尝试更改

ControllerContext

pdfBytes = actionPDF.BuildFile(controller.ControllerContext);

使用以下方法:

pdfBytes = actionPDF.BuildFile(CreateDummyControllerContext("SiteSuperReports"));

您可能需要添加Microsoft.Extensions.PlatformAbstractions程序包。