MacApiError 数据处理中流不可异步写入
简介
最近在苹果本上运行 NetCore WebApi 时遇到的问题
出现的问题
- 未做数据过滤时正常
- 数据过滤,进行加密后报错
- 去掉数据加密正常
- Win 系列系统正常
- Mac 系统不正常(其他 Linux 未做测试)
问题出现原因
- 数据加密需要对返回内容做加密处理,并写入流
- WebApi 数据处理中流不可直接异步写入,也不可同步写入
解决办法
- 服务配置为允许同步写入: AllowSynchronousIO = true
services.Configure<KestrelServerOptions>(option => option.AllowSynchronousIO = true); services.Configure<IISServerOptions>(option => option.AllowSynchronousIO = true);
- 异步、同步都可写入了
using var resWriter = new StreamWriter(resOrigin); await resWriter.WriteAsync(writeStr); await resWriter.FlushAsync(); //将原始的请求和响应流替换回去 context.Request.Body = reqOrigin; context.Response.Body = resOrigin;