Ho creato Web Api e MVC combinati per l'applicazione web a pagina singola. Voglio chiamare web api e renderizzare il controller mvc per creare pdf dalla vista usando Rotativa api. Il problema è quando accedo al controller mvc in web api non funziona.Come accedere al controller mvc nel controller web api per ottenere il pdf dalla vista
Come accedere al controller mvc in web api per ottenere il pdf dalla vista?
Nota: oggetto controller mvc dichiarato in web api, quindi "ControllerContext" è nullo nel metodo "GetPdfBytesFormView".
Web Api:
[RoutePrefix("api/reports/TestReport")]
public class TestReportController : ApiController
{
[HttpPost]
[Route("GetRequistionPdf")]
public HttpResponseMessage GetRequistionPdf(modelClass oModel)
{
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.OK, "value");
ReportController _Report = new ReportController();
response.Content = new ByteArrayContent(_Report.GetPdfBytesFormView(oModel));
response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/pdf");
return response;
}
}
MVC Controller:
public class ReportController : Controller
{
public ActionResult GenerateReport(modelClass oModel)
{
return View(oModel);
}
public byte[] GetPdfBytesFormView(modelClass oModel)
{
var actionPDF = new Rotativa.ActionAsPdf("GenerateReport", oModel)
{
PageSize = Size.A4,
PageOrientation = Orientation.Portrait,
PageMargins = { Left = 6, Right = 7 }
};
byte[] applicationPDFData = actionPDF.BuildPdf(ControllerContext);
return applicationPDFData;
}
}
Angularjs web API chiamata
$http.post('http://localhost:54527/api/reports/TestReport/GetRequistionPdf', { data }, { responseType: 'arraybuffer' })
.success(function (data) {
var file = new Blob([data], { type: 'application/pdf' });
var fileURL = URL.createObjectURL(file);
window.open(fileURL);
});
Che cosa significa "non funziona"? In * in che modo * questo fallisce? – David
@David, oggetto controller mvc dichiarato in web api quindi dà "ControllerContext" è null nel metodo "GetPdfBytesFormView". –
che sarebbe corretto in quanto il contesto non era impostato quando lo hai dichiarato. Il framework normalmente gestisce tutto questo per te quando chiami il controller, ma poiché lo stai facendo manualmente non è impostato. – Nkosi