• 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
Может ли кто-нибудь указать мне правильное направление?