ASPNETZERO - аутентификация в SelectPdf ConvertUrl() из Angular 4/.Net Core

Я использую Angular 4+.Net Core от ASPNETZERO.

У меня есть сетка, которая отображает список отправленных пользователем форм и столбец с кнопкой для печати формы.

Вот моя функция печати; Я передаю URL для метода ConvertUrl() во входных данных:

    print(item: FormSummaryDto) {
        this.beginTask();

        let formUrl = AppConsts.appBaseUrl + '/#/app/main/form/' + item.formType.toLowerCase() + '/' + item.id + '/print';

        let input = new ExportFormInput({ formId: item.id, formUrl: formUrl, includeAttachments: true });

        this.service.exportFormToPdf(input)
            .finally(() => { this.endTask(); })
            .subscribe((result) => {
                if (result == null || result.fileName === '') {
                    return;
                }

                this._fileDownloadService.downloadTempFile(result);
            }, error => console.log('downloadFile', 'Could not download file.'));
    }

Все работает нормально с процессом конвертации и загрузки файла, однако, когда я выполняю конвертацию (ниже), URL перенаправляет на страницу входа в систему из-за аутентификации, и именно эта страница конвертируется.

HtmlToPdf converter = new HtmlToPdf();
PdfDocument doc = converter.ConvertUrl(url);
doc.Save(file);
doc.Close();

Я не знаю, как использовать параметры аутентификации SelectPdf с ASPNETZERO, и надеюсь, что кто-то знает, как я могу передать текущий сеанс / учетные данные или как использовать один из параметров аутентификации SelectPdf, чтобы он преобразовывал переданный URL.

Поблагодарить!

Wg

2 ответа

Решение

В документации SelectPdf для файла cookie проверки подлинности меня оттолкнуло System.Web.Security.FormsAuthentication.FormsCookieName в примере, который, как я предполагал, должен был быть.

// set authentication cookie
converter.Options.HttpCookies.Add(
    System.Web.Security.FormsAuthentication.FormsCookieName,
     Request.Cookies[FormsAuthentication.FormsCookieName].Value);

но я получил следующее исключение:

System.TypeLoadException: Could not load type 'System.Web.Security.FormsAuthentication' from assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

В конце концов я понял, что мне нужно было передать куки аутентификации ASPNETZERO (который после просмотра в папке куки был "Abp.AuthToken"). Вместо того, чтобы пытаться получить значение cookie в методе service, я передал его в параметре call:

    print(item: FormSummaryDto) {
        this.beginTask();

        let formUrl = AppConsts.appBaseUrl + '/#/app/main/form/' + item.formType.toLowerCase() + '/' + item.id + '/print';
        let authToken = abp.utils.getCookieValue('Abp.AuthToken');

        let input = new ExportFormInput({ formId: item.id, formUrl: formUrl, authToken: authToken, includeAttachments: true });

        this.service.exportFormToPdf(input)
            .finally(() => { this.endTask(); })
            .subscribe((result) => {
                if (result == null || result.fileName === '') {
                    return;
                }

                this._fileDownloadService.downloadTempFile(result);
            }, error => console.log('downloadFile', 'Could not download file.'));
    }

и, наконец, в методе, добавив опцию конвертера HttpCookies:

HtmlToPdf converter = new HtmlToPdf();
converter.Options.HttpCookies.Add("Abp.AuthToken", authToken);
PdfDocument doc = converter.ConvertUrl(url);
doc.Save(file);
doc.Close();

После этого мне удалось успешно преобразовать URL.

Wg

Вы видели эту страницу? https://selectpdf.com/docs/WebPageAuthentication.htm

Все преобразования выполняются в новом сеансе, поэтому вам нужно аутентифицировать пользователя для конвертера.

Другие вопросы по тегам