我尝试过Rotativa和PdfGenerator,但似乎他们模仿了浏览器,或类似的东西。
问题是我的观点只能由经过身份验证的用户查看。
如何防止未经过身份验证的用户访问此PDF?
我目前使用的代码示例如下:
[AllowOperationsOnly]
public ActionResult PDFReport(DateTime date)
{
return new Rotativa.ActionAsPdf("Report", date);
}
[HttpGet]
[AllowOperationsOnly]
public ActionResult Report(DateTime date)
{
// my code...
return View();
}
生成的PDF是用户在未经过身份验证时重定向的页面。
答案 0 :(得分:0)
装饰您希望仅允许经过身份验证的用户使用[Authorize]
属性进行访问的操作:
[AllowOperationsOnly]
[Authorize]
public ActionResult PDFReport(DateTime date)
{
return new Rotativa.ActionAsPdf("Report", date);
}
[HttpGet]
[AllowOperationsOnly]
[Authorize]
public ActionResult Report(DateTime date)
{
// my code...
return View();
}
[Authorize]
属性支持各种其他重载,允许您定义特定内容,例如您希望在需要时允许访问已修饰操作/控制器的角色或用户。
关于Rotativa
基于this seemingly related GitHub issue,您可能必须向Rotativa明确传递任何身份验证令牌或Cookie信息才能使其按预期工作:
return new Rotativa.ActionAsPdf("Report")
{
FormsAuthenticationCookieName = System.Web.Security.FormsAuthentication.FormsCookieName,
Cookies = cookies
};
其他一些解决方案还建议您尝试使用ViewAsPdf()
方法,这也可以避免身份验证问题(假设您使用[Authorize]
属性在您的应用程序中处理该问题,然后只是提供PDF:< / p>
[AllowOperationsOnly]
public ActionResult PDFReport(DateTime date)
{
return new Rotativa.ViewAsPdf("Report", date);
}