#blazor #webassembly
Вопрос:
В моем клиентском компоненте blazor я получаю отчет, используя это:
lt;button @onclick="GetReport"gt; GETlt;/buttongt; protected async Task GetReport() { var dateFrom = new DateTime(DateTime.Now.Year, DateTime.Now.Month, DateTime.Now.Day); var dateTo = dateFrom.AddDays(1); var parameter = new FetchEmployeeAttendance { DateFrom = dateFrom, DateTo = dateTo, ReportType = 1, UserId = 2 }; var result = await DailyTimeInService.GetDailyAttendances(parameter); Console.WriteLine(result); }
В сервисе я так называю сервер:
public async Tasklt;System.Net.Http.HttpContentgt; GetDailyAttendances(FetchEmployeeAttendance parameter) { var result = await httpService.Post($@"api/Reports", parameter); return result; } public async Tasklt;HttpContentgt; Post(string uri, object value) { var request = new HttpRequestMessage(HttpMethod.Post, uri); var x = JsonSerializer.Serialize(value); request.Content = new StringContent(JsonSerializer.Serialize(value), Encoding.UTF8, "application/json"); var result = await SendRequest(request); return result; } private async Tasklt;HttpContentgt; SendRequest(HttpRequestMessage request) { var user = await localStorageService.GetItemlt;stringgt;("access_token"); var isApiUrl = !request.RequestUri.IsAbsoluteUri; if (user != null amp;amp; isApiUrl) request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", user); using var response = await httpClient.SendAsync(request); var content = await response.Content.ReadAsByteArrayAsync(); response.Content = new ByteArrayContent(content); if (response.StatusCode == HttpStatusCode.Unauthorized) { navigationManager.NavigateTo("login"); } if (response.StatusCode == HttpStatusCode.BadRequest) { var reply = await response.Content.ReadAsStringAsync(); var oReply = JsonSerializer.Deserializelt;ErrorReplygt;(reply); await helperService.InvokeAlert("Sorry...", $@"{oReply.Error[0].ToString()}", true); } return response.Content; } In the server, this is the controller that I call: [HttpPost] public async Tasklt;ActionResultgt; GetReportByAdmin(FetchEmployeeAttendance parameter) { try { var result = await repo.GetDailyAttendances(parameter); string mimeType = ""; int extension = 1; var path = $@"{webHostEnvironment.WebRootPath}\Reports\Report.rdlc"; Dictionarylt;string, stringgt; param = new Dictionarylt;string, stringgt;(); param.Add("param", "Sample Report"); var localReport = new LocalReport(path); localReport.AddDataSource("dsAttendance", result); if(parameter.ReportType == 1) { var res = localReport.Execute(RenderType.Pdf, extension, param, mimeType); return File(res.MainStream, "application/pdf"); } else { var res = localReport.Execute(RenderType.Excel, extension, param, mimeType); return File(res.MainStream, "application/msexcel"); } } catch (Exception ex) { return apiResult.Send400(ex.Message); } }
Ответ с сервера может быть в формате pdf или excel. Как мне отобразить файл(pdf или excel) на новой вкладке, поскольку я не использую атрибут «href» в компоненте, потому что мне нужно включить некоторые параметры при вызове сервера?
Комментарии:
1. Разбор PDF-файла чрезвычайно сложно выполнить в Интернете. Я бы рекомендовал использовать библиотеку pdf C# для визуализации в формате .jpg, а затем представить их в качестве источников для тега lt;imggt;. Excel немного проще в зависимости от того, что именно вам нужно. ЕСЛИ вам просто нужны табличные данные, это довольно просто. Если вам нужен точный внешний ВИД, то это будет очень сложно. Даже настольные и онлайн-версии, предоставляемые Microsoft, не соответствуют надежному форматированию, поэтому я бы предположил (без обид), что вам будет еще сложнее.
2. Другой вариант-найти конвертер SVG или сохранить его, так как SVG гораздо более совместим с веб-интерфейсом.
3. @Bennyboy1973 Спасибо. Что я только что сделал, так это извлек список из API, а затем в своем Blazor WASM я просто преобразовал его в pdf и excel. Таким образом, клиентская сторона отображает его в формате pdf и excel. Это стало НАМНОГО, намного проще.
4. Ну, проблема в том, что не все клиентские стороны гарантированно способны отображать документы pdf или excel. Но если у вас есть результаты, которыми вы довольны, я рад это слышать!