鉴于 MVC控制器方法,构建并返回 PDF 。
[HttpGet]
[Route("pdf/{acc}/{sign}")]
public async Task<ActionResult> Download(string acc, string sign)
{
... // omitted some irrelevant detail.
var html = this.View("Letter", model).Capture(this.ControllerContext);
byte[] pdf = this.CreatePdfFromHtml(html);
return this.File(binary, "application/pdf", file);
}
Capture
扩展方法捕获html
输出,然后将其作为文件返回。
我需要在下面的webapi2方法中执行上述方法(或接近)。 我需要凭据和其他登录状态才能出现。 webapi和MVC请求属于使用cookie进行安全保护的同一应用程序。
[HttpPost]
[Route("generate")]
public int Generate(MyRequestModel request)
{
byte[] pdf = ... // how do i get the file above??
}
答案 0 :(得分:2)
您应该通过HttpClient
请求 MVC操作,或者只是将PDF创建分解为MVC和Web Api操作都可以引用的帮助程序类。
使用第一种方法,您需要对请求进行身份验证,这对于MVC操作来说有点难度。 MVC使用多步授权:登录,验证,设置cookie,重定向。您必须按照相同的步骤才能通过HttpClient
设置Cookie。可以把它想象成一个迷你浏览器。另一方面,Web Api只接受Authorization
标头,因为API请求是幂等的。
最简单,最直接的路由,特别是因为你的MVC和Web Api都位于同一个应用程序中,只需将PDF创建代码分解为帮助类。那么,你的MVC和Web Api动作只需调用该类的一些方法来获取PDF,从而减少代码重复。