C#打印视图为PDF

时间:2017-04-05 17:54:29

标签: c# asp.net-mvc

我尝试过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是用户在未经过身份验证时重定向的页面。

1 个答案:

答案 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);
}