Доступ к FileResultStream из клиентской части Blazor - PullRequest
0 голосов
/ 08 июля 2020
• 1000 Blazor клиентское приложение.

В настоящее время, чтобы добавить JWT в заголовок, я вызываю свой аутентифицированный контроллер, используя System.Net.Http

    public async Task<byte[]> LoadFile(int id)
    {
        var response = await _http.GetAsync<byte[]>($"document/{id}");

        if (response.HasError)
        {
            errorText = response.Error;
            errorVisible = true;
        }

        return response.Result;
    }

, где GetAsync - это перегрузка, добавляет JWT в заголовок, отправляет вызов и десериализует объект <T> в этом случае byte[];

    public async Task<ServiceResponse<T>> GetAsync<T>(
        string url)
    {
        await AddTokenToHeader();

        var response = await _httpClient.GetAsync(url);

        return await BuildResponse<T>(response);
    }

internal async Task<ServiceResponse<T>> BuildResponse<T>(HttpResponseMessage response)
    {
        try
        {
            var responseContent = await response.Content.ReadAsStringAsync();

            if (response.IsSuccessStatusCode)
            {
                var result = JsonConvert.DeserializeObject<T>(responseContent);

                return new ServiceResponse<T> { Result = result, HasError = false, HttpErrorCode = -1, Error = null };
            }
            else
            {
                return new ServiceResponse<T> { Result = default(T), HasError = true, HttpErrorCode = (int)response.StatusCode, Error = responseContent };
            }
        }
        catch(Exception ex)
        {
            return new ServiceResponse<T> { Result = default(T), HasError = true, HttpErrorCode = (int)response.StatusCode, Error = ex.Message };
        }
    }

Мой метод api:

    [HttpGet]
    [ProducesResponseType(typeof(FileStreamResult), 200)]
    [Route("{documentId}")]
    public IActionResult GetDocumentImage(int documentId)
    {
        var response = _service.Get(documentId);

        Stream stream = new MemoryStream(response.Result.Data);

        if (stream == null)
            return NotFound();

        return File(stream, response.Result.MimeType); 
    }

Что я могу подтвердить. вернуть byte[]. Однако для десериализации byte[] должен использоваться неправильный тип, поскольку response.Result из .GetAsync каждый раз имеет значение null? Как мне десериализовать FileResultStream

Может ли кто-нибудь указать мне правильное направление?

...