annotate Controllers/ReportController.cs @ 1:a2855cd2d97e default tip

Update: .hgignore
author Franklin Schmit <meokcin@gmail.com>
date Thu, 05 Sep 2024 10:24:33 +0800
parents 689cde763395
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
1 using System;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
2 using System.IO;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
3 using System.Linq;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
4 using System.Net;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
5 using System.Net.Http;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
6 using System.Text;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
7 using System.Text.RegularExpressions;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
8 using System.Threading.Tasks;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
9 using Microsoft.AspNetCore.Http;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
10 using Microsoft.AspNetCore.Http.Extensions;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
11 using Microsoft.AspNetCore.Mvc;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
12
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
13 namespace Grille2.Controllers
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
14 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
15 public partial class ReportController : Controller
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
16 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
17 [HttpGet("/__ssrsreport")]
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
18 public async Task Get(string url)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
19 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
20 if (!String.IsNullOrEmpty(url))
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
21 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
22 using (var httpClient = CreateHttpClient())
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
23 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
24 var responseMessage = await ForwardRequest(httpClient, Request, url);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
25
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
26 CopyResponseHeaders(responseMessage, Response);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
27
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
28 await WriteResponse(Request, url, responseMessage, Response, false);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
29 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
30 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
31 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
32
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
33 [Route("/ssrsproxy/{*url}")]
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
34 public async Task Proxy()
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
35 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
36 var urlToReplace = String.Format("{0}://{1}{2}/{3}/", Request.Scheme, Request.Host.Value, Request.PathBase, "ssrsproxy");
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
37 var requestedUrl = Request.GetDisplayUrl().Replace(urlToReplace, "", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
38 var reportServerIndex = requestedUrl.IndexOf("/ReportServer", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
39 if (reportServerIndex == -1)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
40 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
41 reportServerIndex = requestedUrl.IndexOf("/Reports", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
42 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
43 var reportUrlParts = requestedUrl.Substring(0, reportServerIndex).Split('/');
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
44
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
45 var url = String.Format("{0}://{1}:{2}{3}", reportUrlParts[0], reportUrlParts[1], reportUrlParts[2],
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
46 requestedUrl.Substring(reportServerIndex, requestedUrl.Length - reportServerIndex));
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
47
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
48 using (var httpClient = CreateHttpClient())
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
49 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
50 var responseMessage = await ForwardRequest(httpClient, Request, url);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
51
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
52 CopyResponseHeaders(responseMessage, Response);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
53
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
54 if (Request.Method == "POST")
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
55 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
56 await WriteResponse(Request, url, responseMessage, Response, true);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
57 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
58 else
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
59 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
60 if (responseMessage.Content.Headers.ContentType != null && responseMessage.Content.Headers.ContentType.MediaType == "text/html")
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
61 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
62 await WriteResponse(Request, url, responseMessage, Response, false);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
63 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
64 else
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
65 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
66 using (var responseStream = await responseMessage.Content.ReadAsStreamAsync())
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
67 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
68 await responseStream.CopyToAsync(Response.Body, 81920, HttpContext.RequestAborted);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
69 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
70 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
71 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
72 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
73 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
74
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
75 partial void OnHttpClientHandlerCreate(ref HttpClientHandler handler);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
76
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
77 private HttpClient CreateHttpClient()
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
78 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
79 var httpClientHandler = new HttpClientHandler();
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
80
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
81 httpClientHandler.AllowAutoRedirect = true;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
82 httpClientHandler.UseDefaultCredentials = true;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
83
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
84 if (httpClientHandler.SupportsAutomaticDecompression)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
85 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
86 httpClientHandler.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
87 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
88
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
89 OnHttpClientHandlerCreate(ref httpClientHandler);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
90
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
91 return new HttpClient(httpClientHandler);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
92 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
93
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
94 partial void OnReportRequest(ref HttpRequestMessage requestMessage);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
95
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
96 async Task<HttpResponseMessage> ForwardRequest(HttpClient httpClient, HttpRequest currentReqest, string url)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
97 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
98 var proxyRequestMessage = new HttpRequestMessage(new HttpMethod(currentReqest.Method), url);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
99
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
100 foreach (var header in currentReqest.Headers)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
101 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
102 if (header.Key != "Host")
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
103 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
104 proxyRequestMessage.Headers.TryAddWithoutValidation(header.Key, new string[] { header.Value });
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
105 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
106 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
107
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
108 this.OnReportRequest(ref proxyRequestMessage);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
109
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
110 if (currentReqest.Method == "POST")
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
111 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
112 using (var stream = new MemoryStream())
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
113 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
114 await currentReqest.Body.CopyToAsync(stream);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
115 stream.Position = 0;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
116
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
117 string body = new StreamReader(stream).ReadToEnd();
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
118 proxyRequestMessage.Content = new StringContent(body);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
119
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
120 if (body.IndexOf("AjaxScriptManager") != -1)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
121 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
122 proxyRequestMessage.Content.Headers.Remove("Content-Type");
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
123 proxyRequestMessage.Content.Headers.Add("Content-Type", new string[] { currentReqest.ContentType });
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
124 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
125 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
126 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
127
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
128 return await httpClient.SendAsync(proxyRequestMessage);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
129 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
130
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
131 static void CopyResponseHeaders(HttpResponseMessage responseMessage, HttpResponse response)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
132 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
133 response.StatusCode = (int)responseMessage.StatusCode;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
134 foreach (var header in responseMessage.Headers)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
135 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
136 response.Headers[header.Key] = header.Value.ToArray();
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
137 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
138
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
139 foreach (var header in responseMessage.Content.Headers)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
140 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
141 response.Headers[header.Key] = header.Value.ToArray();
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
142 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
143
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
144 response.Headers.Remove("transfer-encoding");
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
145 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
146
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
147 static async Task WriteResponse(HttpRequest currentReqest, string url, HttpResponseMessage responseMessage, HttpResponse response, bool isAjax)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
148 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
149 var result = await responseMessage.Content.ReadAsStringAsync();
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
150
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
151 var ReportServer = url.Contains("/ReportServer/", StringComparison.InvariantCultureIgnoreCase) ? "ReportServer" : "Reports";
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
152
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
153 var reportUri = new Uri(url);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
154 var proxyUrl = String.Format("{0}://{1}{2}/ssrsproxy/{3}/{4}/{5}", currentReqest.Scheme, currentReqest.Host.Value, currentReqest.PathBase,
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
155 reportUri.Scheme, reportUri.Host, reportUri.Port);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
156
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
157 if (isAjax && result.IndexOf("|") != -1)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
158 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
159 var builder = new StringBuilder();
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
160
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
161 var delimiterIndex = 0;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
162 var length = 0;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
163 var index = 0;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
164
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
165 var type = "";
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
166 var id = "";
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
167 var content = "";
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
168
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
169 while (index < result.Length)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
170 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
171 delimiterIndex = result.IndexOf("|", index);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
172 if (delimiterIndex == -1)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
173 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
174 break;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
175 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
176 length = int.Parse(result.Substring(index, delimiterIndex - index));
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
177 if ((length % 1) != 0)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
178 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
179 break;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
180 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
181 index = delimiterIndex + 1;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
182 delimiterIndex = result.IndexOf("|", index);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
183 if (delimiterIndex == -1)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
184 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
185 break;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
186 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
187 type = result.Substring(index, delimiterIndex - index);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
188 index = delimiterIndex + 1;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
189 delimiterIndex = result.IndexOf("|", index);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
190 if (delimiterIndex == -1)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
191 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
192 break;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
193 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
194 id = result.Substring(index, delimiterIndex - index);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
195 index = delimiterIndex + 1;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
196 if ((index + length) >= result.Length)
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
197 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
198 break;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
199 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
200 content = result.Substring(index, length);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
201 index += length;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
202 if (result.Substring(index, 1) != "|")
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
203 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
204 break;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
205 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
206 index++;
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
207
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
208 content = content.Replace($"/{ReportServer}/", $"{proxyUrl}/{ReportServer}/", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
209 if (content.Contains("./ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase))
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
210 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
211 content = content.Replace("./ReportViewer.aspx", $"{proxyUrl}/{ReportServer}/Pages/ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
212 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
213 else
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
214 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
215 content = content.Replace("ReportViewer.aspx", $"{proxyUrl}/{ReportServer}/Pages/ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
216 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
217
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
218 builder.Append(String.Format("{0}|{1}|{2}|{3}|", content.Length, type, id, content));
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
219 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
220
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
221 result = builder.ToString();
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
222 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
223 else
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
224 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
225 result = result.Replace($"/{ReportServer}/", $"{proxyUrl}/{ReportServer}/", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
226
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
227 if (result.Contains("./ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase))
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
228 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
229 result = result.Replace("./ReportViewer.aspx", $"{proxyUrl}/{ReportServer}/Pages/ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
230 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
231 else
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
232 {
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
233 result = result.Replace("ReportViewer.aspx", $"{proxyUrl}/{ReportServer}/Pages/ReportViewer.aspx", StringComparison.InvariantCultureIgnoreCase);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
234 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
235 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
236
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
237 response.Headers.Remove("Content-Length");
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
238 response.Headers.Append("Content-Length", new string[] { System.Text.Encoding.UTF8.GetByteCount(result).ToString() });
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
239
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
240 await response.WriteAsync(result);
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
241 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
242 }
689cde763395 init cimmit
Franklin Schmit <meokcin@gmail.com>
parents:
diff changeset
243 }