Как аутентифицировать IronPDF RenderUrlAsPdf? - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь распечатать счет в формате PDF со страницы, требующей аутентификации (https://localhost:44362/invoice). Все это работает аккуратно, когда авторизация отключена, но когда я ее включаю, все это рушится. Я использую. NET Core 2.1 MVC с идентификацией подлинности. Я пробовал два разных решения, которые оба не по-разному.

Попытка 1:
Рендеринг работает, но вход в систему не удается, и в результате pdf является страницей входа. Это, как я понимаю, нормальное поведение при сбое аутентификации.

var uri = new Uri("https://localhost:44362/invoice");
var newPdf = new HtmlToPdf()
{
    PrintOptions = new PdfPrintOptions()
    {
        //..omitted for brevity
    },
    LoginCredentials = new HttpLoginCredentials()
    {
        EnableCookies = true,
        LoginFormPostVariables = new Dictionary<string, string>()
        {
            { "Email", "username@domain.com" },
            { "Password", "secretysecret" }
        },
        LoginFormUrl = new Uri("https://localhost:44362/login")
    }
};
var result = newPdf.RenderUrlAsPdf(uri);

Попытка 2:
Я получаю повар авторизации ie из исходного запроса. Это работает, по крайней мере, настолько, что я действительно могу получить повара ie и установить его на LoginCredentials.CustomCookies. Я сравнил его с запросом браузера, и повар ie кажется правильным. Коллекция Request.Cookies содержит два файла cookie, один для защиты от подделки и один для идентификации.
Рендеринг не выполняется, потому что newPdf.RenderUrlAsPdf(uri) возвращает null, и я не понимаю, почему. Причина должна быть в том, что набор CustomCookies в LoginCredentials каким-то образом завершился с ошибкой, но трассировка стека не дает никакой информации о том, что не удалось. Просто чтобы быть понятным, этот метод не работает, даже если авторизация не используется.

var uri = new Uri("https://localhost:44362/invoice");
var cookies = Request.Cookies;
Dictionary<string, string> customCookies = cookies.ToDictionary(c => c.Key, c => c.Value);
var newPdf = new HtmlToPdf()
{
    PrintOptions = new PdfPrintOptions()
    {
        //..omitted for brevity
    },
    LoginCredentials = new HttpLoginCredentials()
    {
        EnableCookies = true,
        CustomCookies = customCookies
        //LoginFormPostVariables = new Dictionary<string, string>()
        //{
        //    { "Email", "username@domain.com" },
        //    { "Password", "secretysecret" }
        //},
        //LoginFormUrl = new Uri("https://localhost:44362/login")
    }
};
var result = newPdf.RenderUrlAsPdf(uri);
...