ASPNETZERO - аутентификация в SelectPdf ConvertUrl () из Angular 4 / .Net Core - PullRequest
0 голосов
/ 16 сентября 2018

Я использую 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 ]

0 голосов
/ 19 сентября 2018

В документации 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 в методе сервиса, я передал его в параметре 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

0 голосов
/ 17 сентября 2018

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

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

...