我正在嘗試從我的 Azure 函式流式傳輸資料,一切都很好,但在執行后出現錯誤。
這是代碼:
[FunctionName("QueryData")]
public async Task QuerySingleMessages([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)] HttpRequest req)
{
var message = await req.GetPostMessage<Message>();
var response = req.HttpContext.Response;
response.StatusCode = 200;
response.ContentType = "application/json-data-stream";
var sw = new StreamWriter(response.Body);
foreach (var msg in this.messageReaderService.FindLatestMessages(message.keys))
{
var json = System.Text.Json.JsonSerializer.Serialize(
msg,
new JsonSerializerOptions {PropertyNameCaseInsensitive = false});
await sw.WriteAsync(json);
}
await sw.FlushAsync();
await sw.DisposeAsync();
}
這是錯誤:
[2022-05-06T15:15:17.034Z] Executed 'QueryData' (Succeeded, Id=df70d5a7-37d7-40ef-b446-ecceb943e454, Duration=1350ms)
[2022-05-06T15:15:17.047Z] An unhandled host error has occurred.
[2022-05-06T15:15:17.048Z] Microsoft.AspNetCore.Server.Kestrel.Core: StatusCode cannot be set because the response has already started.
是否有我可以更改的配置(或其他東西)以便我可以阻止host error發生?
謝謝
uj5u.com熱心網友回復:
從我們的最終復制后,當我們嘗試修復回傳型別并回傳 EmptyResult 時,我們可以得到這項作業,即return new EmptyResult();.
[FunctionName("Function1")]
public static async Task<EmptyResult> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)] HttpRequest req,
ILogger log)
{
var message = await req.GetPostMessage<Message>();
var response = req.HttpContext.Response;
response.StatusCode = 200;
response.ContentType = "application/json-data-stream";
var sw = new StreamWriter(response.Body);
foreach (var msg in this.messageReaderService.FindLatestMessages(message.keys))
{
var json = System.Text.Json.JsonSerializer.Serialize(
msg,
new JsonSerializerOptions { PropertyNameCaseInsensitive = false });
await sw.WriteAsync(json);
}
await sw.FlushAsync();
await sw.DisposeAsync();
return new EmptyResult();
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/471667.html
