报表查看器和Web Api

时间:2019-04-18 06:24:11

标签: asp.net-web-api2 rdlc reportviewer

在MVC中,我可以生成.xsl或.pdf文件,而File()则没有问题,但是使用Web Api时,什么也没发生!到目前为止,这是我尝试过的。

我在这里尝试了几种解决方案,包括这个Web API and report viewer ,但对我没有任何帮助。

 public HttpResponseMessage Export(ExportVolunteerSearchFilter searchModel)
    {

        if (searchModel.Equals(null))
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest);

        }

        var volunteers = _volunteersService.ExportAllVolunteersData(searchModel);
        ReportViewer ReportViewer1 = new ReportViewer();
            ReportViewer1.SizeToReportContent = true;
            ReportViewer1.LocalReport.ReportPath =

                System.Web.HttpContext.Current.Server.MapPath("~/Reports/VolunteersReport.rdlc"); 

        ReportViewer1.LocalReport.EnableExternalImages = true;
            ReportViewer1.LocalReport.DataSources.Clear();
            ReportDataSource _rsource = new ReportDataSource("DataSet1", volunteers);
            ReportViewer1.LocalReport.DataSources.Add(_rsource);
            ReportViewer1.LocalReport.Refresh();
        Warning[] warnings;
        string[] streamIds;
        string mimeType = string.Empty;
        string encoding = string.Empty;
        string extension = string.Empty;
        string fileName = "reportVolunteer";


        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

        var stream = new FileStream(System.Web.HttpContext.Current.Server.MapPath("~/Reports/VolunteersReport.rdlc"), FileMode.Open);
        response.Content = new StreamContent(stream);
        response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment");
        response.Content.Headers.ContentDisposition.FileName = fileName;
        response.Content.Headers.ContentType = new MediaTypeHeaderValue("application/xls");

        return response;

    }

1 个答案:

答案 0 :(得分:-1)

我这样做是:-

response.Content = new PushStreamContent(
 async (outstream) =>
{
  await getDataMethod(outstream)
},
 new MediaTypeHeadrerValue(mediaType:"application/xls"));

response.Content.Headers.ContentDisposition = new ContentDispositionHeaderValue("attachment")
            {
                FileName = $"test.xls"
            };
return response;