我有 2 個微服務(以簡單的方式分享),這是來自“源”微服務的代碼
[HttpGet]
[Route("resource")]
public async Task<byte[]> LocateResource(Guid Id)
{
if (Id== Guid.Empty)
{
throw new Exception("Invalid Id");
}
var (content, message) = await _repo.LocateResource(Id);
if (!message.Equals("Success"))
{
throw new Exception(message);
}
// content.lenght equivalent to 56129
return content;
}
然后這是“客戶端”的代碼
public async Task<byte[]> ReadFile2(Guid fileStorageId)
{
var response = await _httpClient.GetAsync($"{_urlOptions.Value.ReadFileEndpoint}?Id={Id}");
response.EnsureSuccessStatusCode();
var file = await response.Content.ReadAsByteAsync();
// file.lenght equivalent to 74000
return file;
}
問題是我發送了 56129 個位元組,而我在“客戶端”中接收了 74000 個位元組,而且這種行為似乎沒有任何解釋。有人可以給我更詳細的資訊嗎?
uj5u.com熱心網友回復:
ReadAsByteAsync 實際上存在于 HttpContent 中。我建議你有一個處理轉換的自定義回應類
uj5u.com熱心網友回復:
您應該回傳型別為 的回應FileContentResult。例如:
using Microsoft.AspNetCore.Mvc;
namespace WebApplication2.Controllers
{
[Route("api/[controller]")]
[ApiController]
public class TestController : ControllerBase
{
[HttpGet("file")]
public IActionResult GetFile()
{
var result = new byte[] { 1, 2, 3, 4, 5, 6, 7 };
return this.File(result, "application/octet-stream");
}
}
}
File是ControllerBase類中定義的輔助方法。
默認情況下,ASP.NET 將內容序列化為 JSON,二進制資料使用 base64 進行編碼。這就是為什么您會得到比預期更大的回應。從我的例子看起來結果這樣的編碼和序列化時:"AQIDBAUGBw=="。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/364118.html
