如何使用Telerik REST API从c#console应用程序请求报告

问题描述 投票:0回答:1

我有Telerik REST API,在客户端我使用html5 report-viewer。报告在html的报告viwer中成功生成。现在我想通过c#console应用程序请求来自同一API的报告。我有搜索,但没有任何解决方案。请建议我如何使用C#console应用程序请求报告。

html5 report-viewer Library

注意:我是telerik报道的初学者。

更新1:

我已设法使用此API文档向服务器发送请求。 Telerik Document for Getting Report

在服务器端我写了CustomReportResolver。但现在它现在将InstanceId发送到控制台客户端。

CustomReportResolver

public class CustomReportResolver : IReportResolver
    {
        public ReportSource Resolve(string reportJsonString)
        {
            var reportDto = JsonConvert.DeserializeObject<ReportDTO>(reportJsonString);

            var connectionStringHandler = new CustomConnectionStringManager(reportDto.CompanyId);


            var reportsPath = HttpContext.Current.Server.MapPath($"~/Reports/{reportDto.ReportPath}");


            var sourceReportSource = new UriReportSource { Uri = reportsPath  + reportDto.ReportName };

         //   sourceReportSource.Parameters.Add(new Telerik.Reporting.Parameter("companyId", reportDto.CompanyId));
            var reportSource = connectionStringHandler.UpdateReportSource(sourceReportSource);
            return reportSource;
        }
    }

请注意,如果我使用默认的ReportResolver自托管telerik服务成功发送pdf报告到控制台,但如果我使用CustomReportResolver它不生成instanceId

可能是什么问题呢 ?

c# console-application telerik-reporting
1个回答
1
投票

在浪费了大量时间之后,找到了一个解决方案,如何从Telerik Self托管Web服务获取PDF(或任何其他报告格式)文档。以下是要遵循的一般步骤。

  1. 获取客户端ID
  2. 获取实例ID
  3. 获取文档ID
  4. 下载文件

下面是一个逐步的代码:

static HttpClient client = new HttpClient();
        static string reportServerAddress = "http://localhost:60031/";
        static string serverREStAPI = reportServerAddress + "api/";

        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("Demo started");

                RunAsync().Wait();

                Console.WriteLine("Demo ended");
                Console.ReadLine();
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex);
                Console.ReadKey();
            }
        }

        static async Task RunAsync()
        {
           // readFile();
           // return;
            client.BaseAddress = new Uri(serverREStAPI);
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("text/html"));



            /*
             * Steps To get PDF documents from Telerik Self hosted Web Service
             * Step 1) Get Client Id,
             * Step 2) Get Instance Id
             * Step 3) Get Document Id
             * Step 4) Download Document
             * 
             * */

            var clientId = await GetClientIdAsync(serverREStAPI + "reports/clients", "clientId");

            var instanceId =
                await GetInstanceAsync(serverREStAPI + $"reports/clients/{clientId}/instances", "instanceId");
            var documentId =
                await GetDocumentAsync(serverREStAPI + $"reports/clients/{clientId}/instances/{instanceId}/documents",
                    "documentId");

              await DownloadPDF(serverREStAPI + $"reports/clients/{clientId}/instances/{instanceId}/documents/{documentId}", true);


        }





        static async Task<string> GetClientIdAsync(string path, string paramName)
        {

            HttpResponseMessage response = await client.PostAsJsonAsync(path, "");
            response.EnsureSuccessStatusCode();

            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            dynamic result = serializer.DeserializeObject(response.Content.ReadAsStringAsync().Result);
            return result[paramName];
        }

        static async Task<string> GetInstanceAsync(string path, string paramName)
        {

            /*
             * For Default resolver in Service
             * */
            var paramterValues = new {CompanyId = 1};
            // var data = new { report = "{ \"ReportName\":\"test.trdx\",\"CompanyId\":\"1\"}", parameterValues = "{\"CompanyId\": \"1\"}" };    
            var data = new
            {
                report = "{\"ReportName\":\"test.trdx\",\"CompanyId\":\"1\"}",
                parameterValues = paramterValues
            };





            HttpResponseMessage response = await client.PostAsJsonAsync(path, data);
            response.EnsureSuccessStatusCode();

            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            dynamic result = serializer.DeserializeObject(response.Content.ReadAsStringAsync().Result);
            return result[paramName];
        }

        static async Task<string> GetDocumentAsync(string path, string paramName)
        {



            var data = new {format = "PDF"}; //PDF,XLS,MHTML
            HttpResponseMessage response = await client.PostAsJsonAsync(path, data);
            response.EnsureSuccessStatusCode();

            var serializer = new System.Web.Script.Serialization.JavaScriptSerializer();
            dynamic result = serializer.DeserializeObject(response.Content.ReadAsStringAsync().Result);
            return result[paramName];
        }



        static async Task DownloadPDF(string path, bool asAttachment)
        {
            var queryString = "";

            // if (asAttachment)
            //  {
            //  queryString += "?content-disposition=attachment";
            //  }



            var filePathAndName = @"D:\testing\tet.html";
            //   File.Create(filePathAndName);

            //  string filePath = System.IO.Path.Combine(folderName, fileName);

            //System.IO.File.WriteAllText(filePathAndName, result);


            using (System.Net.WebClient myWebClient = new System.Net.WebClient())
            {
                await myWebClient.DownloadFileTaskAsync(new Uri(path + queryString), filePathAndName);
            }



            System.Diagnostics.Process.Start(filePathAndName);
        }
© www.soinside.com 2019 - 2024. All rights reserved.