#事故现场
在asp.net core web api项目中,读取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();
}
}
#解决方法
同步读取body的方式需要ConfigureServices中配置允许同步读取IO流,否则可能会抛出异常 Synchronous operations are disallowed. Call ReadAsync or set AllowSynchronousIO to true instead.
根据使用的托管的服务进行配置或直接使用异步读取方式。
public void ConfigureServices(IServiceCollection services)
{
//其他
services.Configure<KestrelServerOptions>(x => x.AllowSynchronousIO = true)
.Configure<IISServerOptions>(x=>x.AllowSynchronousIO = true);
}