从webapi2服务调用常规MVC控制器方法

时间:2017-04-17 14:26:02

标签: c# asp.net-mvc asp.net-web-api2

鉴于 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??
    }

1 个答案:

答案 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,从而减少代码重复。