我为单页网络应用程序创建了Web Api和MVC。我想调用Web API并使用Rotativa API来呈现mvc控制器以从视图创建PDF。问题是,当我访问Web API中的MVC控制器它不工作。如何在web api控制器中访问mvc控制器以从视图中获取pdf
我如何访问web api中的mvc控制器从视图中获取pdf?
注意:在web api中声明的mvc控制器对象,所以它在“GetPdfBytesFormView”方法中给出“ControllerContext”为null。
的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控制器:
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网络API调用
$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);
});
“它不工作”是什么意思? *以什么方式*失败? – David
@David,在web api中声明的mvc控制器对象,所以它给出“ControllerContext”在“GetPdfBytesFormView”方法中为null。 –
这将是正确的,因为上下文没有设置时,你宣布它。当您调用控制器时,框架通常会为您处理所有这些问题,但由于您正在手动执行此操作,因此未设置该框架。 – Nkosi