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
Все преобразования выполняются в новом сеансе, поэтому вам нужно аутентифицировать пользователя для конвертера.