如何解决Rotativa BuildFile 未命中操作方法
我的 Controller 类中有两个操作方法:
我的问题是 SaveAsPDF Action 方法。在这里,我尝试使用 Rotativa ActionAsPdf 和随后的 BuildFile 方法来生成和保存 PDF。但是,在执行“BuildFile”这一行时,它没有在我的 DetailsAll Action 方法中遇到断点,从而导致 PDF 生成为空白。
你能帮我哪里出错吗?
[HttpGet]
public ActionResult DetailsAll()
{
var selectionBuilder = builderFactory.GetGeocodeReportSelectionviewmodelBuilder();
var companyList = selectionBuilder.Build();
List<GeocodeReportviewmodel> viewmodel = new List<GeocodeReportviewmodel>();
foreach(SelectListItem record in companyList.Companies)
{
var builder = builderFactory.GetGeocodeReportviewmodelBuilder(int.Parse(record.Value));
viewmodel.Add(builder.Build());
}
var model = new AllGeocodeReportviewmodel
{
GeocodeReports = viewmodel
};
return View(model);
}
[HttpGet]
public string SaveAsPDF()
{
var report = new ActionAsPdf("DetailsAll")
{
FileName = "OEM_GeocodeReport_" + System.DateTime.Now.ToString("MMYY") + ".pdf",PageSize = Size.A4,PageOrientation = Orientation.Landscape,PageMargins = { Left = 1,Right = 1 }
};
byte[] pdf = report.BuildFile(ControllerContext);
System.IO.File.WriteallBytes("C:\\" + report.FileName,pdf);
return "true";
}
解决方法
经过广泛搜索,终于找到了这个问题。我需要将身份验证 cookie 与 BuildFile 请求一起发送才能使其工作。添加了以下代码,现在可以正确生成 PDF:
public void SaveAsPDF()
{
var cookies = Request.Cookies.AllKeys.ToDictionary(k => k,k => Request.Cookies[k].Value);
var report = new ActionAsPdf("DetailsAll")
{
FileName = "OEM_GeocodeReport_" + System.DateTime.Now.ToString("MMyy") + ".pdf",PageSize = Size.A4,PageOrientation = Orientation.Portrait,PageMargins = { Left = 3,Right = 3 },FormsAuthenticationCookieName = System.Web.Security.FormsAuthentication.FormsCookieName,Cookies = cookies
};
byte[] pdf = report.BuildFile(ControllerContext);
System.IO.File.WriteAllBytes("C:\\" + report.FileName,pdf);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。