Rotativa.AspNetCore не работает после развертывания в smarterasp - PullRequest
0 голосов
/ 28 сентября 2018

В моем последнем проекте NetCore (2.0) я использую Rotativa.AspNetCore, все работало нормально (локально), так как я опубликовал его в SmarterAsp.

Основная проблема заключается в том, что при попытке создать PDFФайл через мой API, действие не работает, возвращает ошибку:

Запрошенная страница не найдена.[404]

Ошибка синтаксического анализа XML: корневой элемент не найден

Расположение: https: //.../api/file/MembershipRegistrationApplication

Строка № 1, столбец 1:

Изображение ошибки:

https://i.stack.imgur.com/J5WAg.jpg enter image description here

Вот мой код

[HttpPost]
[AllowAnonymous]
[Route("/api/file/MembershipRegistrationApplication")]
public async Task<byte[]> MembershipRegistrationApplication([FromBody] RegisterViewModel model)
{
    var education = new List<Education>();

    education.Add(_educationService.IncludeEducation(model.Education));

    var user = new ApplicationUser
    {
        Email = model.Email,
        PhoneNumber = model.PhoneNumber,
        BirthDate = model.BirthDate,
        Address = model.Address,
        PlaceOfBirth = model.PlaceOfBirth,
        MunicipalityOfBirthId = model.MunicipalityId,
        IsMale = model.IsMale,
        FathersName = model.FathersName,
        LastName = model.LastName,
        MaritalStatusId = model.MaritalStatusId,
        CitizenshipId = model.CitizenshipId,
        MunicipalityId = model.MunicipalityId,
        FirstName = model.FirstName,
        NationalityId = model.NationalityId,
        PersonalNumber = model.PersonalNumber,
        ForeignMunicipalityOfBirth = model.ForeignMunicipalityOfBirth,
        Educations = education,
        MaidenName = model.MaidenName
    };

    user = _accountService.IncludeApplicationUser(user);
    return await _pdfGenerator.GenerateMembershipApplication(user);
}

GenerateMembershipApplication код метода

public async Task<byte[]> GenerateMembershipApplication(ApplicationUser user)
{
    var httpContext = new DefaultHttpContext { RequestServices = _serviceProvider };
    var actionContext = new ActionContext(httpContext, new RouteData(), new ActionDescriptor());

    var bytePDF = new Rotativa.AspNetCore.ViewAsPdf("File/MembershipApplication", user)
    {
        PageMargins = { Top = 10, Right = 1, Bottom = 1, Left = 20 },
        FileName = string.Concat("MembershipApplication", ".pdf")
    }.BuildFile(actionContext);

   return await bytePDF;
}

и вызов ajax

$.ajax({
    url: "/api/file/MembershipRegistrationApplication",
    type: 'post',
    contentType: "application/json; charset=utf-8",
    dataType: "json",
    data: JSON.stringify(model),
    success: function (data) {
        var pdfAsDataUri = "data:application/pdf;base64,"+data;
        window.open(pdfAsDataUri);
    },
    error: function (jqXHR, exception) {
        var msg = '';
        if (jqXHR.status === 0) {
            msg = 'Not connect.\n Verify Network.';
        } else if (jqXHR.status == 404) {
            msg = 'Requested page not found. [404]';
        } else if (jqXHR.status == 500) {
            msg = 'Internal Server Error [500].';
        } else if (exception === 'parsererror') {
            msg = 'Requested JSON parse failed.';
        } else if (exception === 'timeout') {
            msg = 'Time out error.';
        } else if (exception === 'abort') {
            msg = 'Ajax request aborted.';
        } else {
            msg = 'Uncaught Error.\n' + jqXHR.responseText;
        }
        console.log(msg);
    }
});

Сначала я подумал, что проблема связана с данными, публикуемыми вызовом ajax (Я пробовал также с formData, но все еще с той же ошибкой) и после многих часов попыток выяснить, что происходит, я обнаружил, что причиной ошибки был Rotativa. Еще одна причина, по которой я считаю, что Rotativa является причиной проблемы, заключается в том, что другие API, которые неотносятся к процессу создания PDF-файлов.

В моей папке Rotativa также есть необходимые файлы,

  • help-wkhtmltoimage.txt
  • help-wkhtmltopdf.txt
  • msvcp120.dll
  • msvcp140.dll
  • msvcr120.dll
  • vcruntime140.dll
  • wkhtmltoimage.exe
  • wkhtmltopdf.exe wkhtmltox.dll

Есть ли у кого-нибудь какие-либо идеи или предложения, что мне следует сделать, чтобырешить эту проблему?

...