本文主要是介绍『已解决』Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
文章目录
- 一、背景
- 二、问题代码
- 三、问题处理
- 1. 原因
- 2. 解决方法
- 解决方法1——配置支持同步读流
- 解决方法2——改为异步读流
一、背景
- 环境:.Net Core 3.1
- 项目:WebApi
- 操作:读取Request.body的stream流
- 异常:
Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.
二、问题代码
var request = context.HttpContext.Request;
if (request.Method == "POST")
{request.Body.Seek(0, SeekOrigin.Begin);using (var reader = new StreamReader(request.Body, Encoding.UTF8)){var data = reader.ReadToEnd();}
}
三、问题处理
1. 原因
- 默认同步读取请求流为
异步
方式 - 默认不支持同步读取
2. 解决方法
解决方法1——配置支持同步读流
public void ConfigureServices(IServiceCollection services)
{services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true).Configure<IISServerOptions>(x => x.AllowSynchronousIO = true);
}
解决方法2——改为异步读流
var request = context.HttpContext.Request;
if (request.Method == "POST")
{request.Body.Seek(0, SeekOrigin.Begin);using (var reader = new StreamReader(request.Body, Encoding.UTF8)){//改为Async异步读流var data = await reader.ReadToEndAsync();}
}
这篇关于『已解决』Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!