我正在嘗試使用 C# 最小 API 為在線辦公室開發 WOPI API,并且在將檔案回傳給客戶端時,我總是收到以下錯誤訊息:
“此流不支持超時”。
我正在使用“應用程式/八位位元組流”HTTP 標頭。
uj5u.com熱心網友回復:
您可能知道 JsonSerializer 不可能序列化流以將其作為回應回傳,您必須將檔案加載到 byte[] 中,然后使用如下代碼將其放入回應正文中:
FileInfo fileInfo = new FileInfo(filePath);
FileStream fs = fileInfo.OpenRead();
byte[] content = fs.ReadBytesAsync();
然后在回傳部分:
httpContext.Response.ContentType = MediaTypeNames.Application.Octet;
return HttpContext.Response.Body.Write(content,0,content.Lenght)
當然,代碼的第二部分應該發生在 Result.Extension 的擴展方法中,如下所示:
static class FileResultExtension
{
public static IResult File(this IResultExtensions resultExtensions, byte[] fileResult)
{
ArgumentNullException.ThrowIfNull(resultExtensions);
return new FileResult(fileResult);
}
}
class FileResult : IResult
{
private readonly byte[] _fileResult;
public FileResult(byte[] fileResult)
{
_fileResult = fileResult;
}
public Task ExecuteAsync(HttpContext httpContext)
{
httpContext.Response.ContentType = MediaTypeNames.Application.Octet;
return httpContext.Response.Body.WriteAsync(_fileResult,0,_fileResult.Length);
}
}
并像這樣在 Program.cs 中使用它:
app.MapGet("/wopi/files/{id}/contents", (FilesService fileService, string id) =>
{
var result = fileService.GetFile(id).Result;
MemoryStream memoryStream = new MemoryStream();
memoryStream.Write(result, 0, result.Length);
return Results.Extensions.File(result);
}).WithName("GetFile");
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/516873.html
標籤:json.net-6.0ms-wopi最小的 API办公网络应用
