ASP.NET API的串流JSON
最近在試著串接AI模型的Web API,發現它是使用串流JSON的回傳方式,對我來說這方式很新鮮,於是就查了ASP.NET是否有支援這樣的回傳方式,發現只要安裝套件就可以了。
首先是透過nuget安裝JsonStreamer.SystemTextJson
,然後在Program.cs加入下列程式碼:
builder.Services.AddControllers().AddJsonStreamer();
在controller,就是依序回傳物件就好:
public async IAsyncEnumerable<ResponseModel> GetJSONStream()
{
yield return new ResponseModel { Id = Guid.NewGuid().ToString(), Message = "aaa3" };
await Task.Delay(100);
yield return new ResponseModel { Id = Guid.NewGuid().ToString(), Message = "aaa4" };
await Task.Delay(100);
yield return new ResponseModel { Id = Guid.NewGuid().ToString(), Message = "aaa5" };
await Task.Delay(100);
yield return new ResponseModel { Id = Guid.NewGuid().ToString(), Message = "aaa6" };
}
API部份只有這樣,而在測試上,可以利用下列程式碼來測試:
HttpClient client = new HttpClient();
client.BaseAddress = new Uri(_host);
var jsonResponse = await client.GetAsync(@"/MyAPI/GetJSONStream");
Stream? stream = await jsonResponse.Content.ReadAsStreamAsync();
var r = ReadJsonStreamMultipleContent(stream);
int count = 0;
foreach (string item in r)
{
if (item != null)
{
Console.Write(item);
Console.WriteLine();
}
await Task.Delay(1);
count++;
}
Console.WriteLine();
Console.WriteLine(count.ToString());
原本想透過POSTMAN來測試,但發現看不出效果。
參考資料