3

我有一个现有的 ASPNET Web 应用程序。前端是 HTML/JavaScript,后端是 WebAPI 2。我们一直在使用 NRECO.PDFGenerator 将 PDF 拖放给用户,这使用 QT 浏览器,调试变得很麻烦。我找到了 PuppeteerSharp 并想试试看。

我使用 nuget 安装了这些库,向我的一个 Web Api 控制器添加了一个 Async 方法,但是当我调用它时,LaunchAsync 方法就崩溃了。

    [Route("api/pdf/v2/download")]
    public IHttpActionResult V2Download([FromBody]  Models.PDF.List _pdf) {

        Models.Message.Response _return = new Models.Message.Response();
        _return.Message = "Success!";
        _return.Now = DateTime.Now;
        try
        {
            string[] argu = null; 
            Meh(argu);
        }
        catch (Exception ex)
        {
            _return.Message = ex.Message;
            _return.Severity = 3;
        }
        return Ok(_return);
    }


    public static async Task Meh(string[] args)
    {
        var options = new LaunchOptions
        {
            Headless = true,
            Args = new[] {"--no-sandbox" }
        };

        Debug.WriteLine("Downloading chromium");
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

        Debug.WriteLine("Navigating google");
        using (var browser = await Puppeteer.LaunchAsync(options))
        using (var page = await browser.NewPageAsync())
        {

            Debug.WriteLine("Navigating to page");
            await page.GoToAsync("http://www.google.com");

            Debug.WriteLine("Generating PDF");
            await page.PdfAsync(Path.Combine(Directory.GetCurrentDirectory(), "google.pdf"));

            Debug.WriteLine("Export completed");

            if (!args.Any(arg => arg == "auto-exit"))
            {
                Console.ReadLine();
            }
        }
    }

我不知道从这里去哪里。这是控制台输出。还有更多...

导航 google 线程 0x3418 已退出,代码为 0 (0x0)。抛出异常:System.Web.dll 中的“System.NullReferenceException”抛出异常:mscorlib.dll 中的“System.NullReferenceException”

该项目正在使用框架 4.7.2

解决方案

涉及到 Async 方法的所有内容也必须是 Async。此外,传递空参数也会导致问题。

这是一个代码示例。

        //[Authorize]
    [Route("api/pdf/v2/download")]
    public async Task<IHttpActionResult> V2Download([FromBody]  Models.PDF.List _pdf) {

        Models.Message.Response _return = new Models.Message.Response();
        _return.Message = "Success!";
        _return.Now = DateTime.Now;
        try
        {
            string[] argu = { }; 
           await Meh(argu);
        }
        catch (Exception ex)
        {
            _return.Message = ex.Message;
            _return.Severity = 3;
        }
        return Ok(_return);
    }


    public static async Task Meh(string[] args)
    {
        var options = new LaunchOptions
        {
            Headless = true
        };

        Debug.WriteLine("Downloading chromium");
        await new BrowserFetcher().DownloadAsync(BrowserFetcher.DefaultRevision);

        Debug.WriteLine("Navigating google");
        using (var browser = await Puppeteer.LaunchAsync(options))
        using (var page = await browser.NewPageAsync())
        {

            Debug.WriteLine("Navigating to page");
            await page.GoToAsync("http://www.google.com");

            Debug.WriteLine("Generating PDF");

            await page.PdfAsync(Path.Combine(Directory.GetCurrentDirectory(), "google.pdf"));

            Debug.WriteLine(Path.Combine(Directory.GetCurrentDirectory(), "google.pdf"));
            Debug.WriteLine("Export completed");

            if (!args.Any(arg => arg == "auto-exit"))
            {
                Console.ReadLine();
            }
        }
    }
4

0 回答 0