我爲單頁網絡應用程序創建了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