缓冲的流-ASP.NET Core 3.0中不允许进行同步操作

安吉拉

我有一个针对AspNetCore 2.2的REST API,该API的端点允许下载一些大的json文件。迁移到AspNetCore 3.1后,此代码停止工作:

    try
    {
        HttpContext.Response.StatusCode = (int)HttpStatusCode.OK;
        HttpContext.Response.Headers.Add("Content-Type", "application/json");

        using (var bufferedOutput = new BufferedStream(HttpContext.Response.Body, bufferSize: 4 * 1024 * 1024))
        {
            await _downloadService.Download(_applicationId, bufferedOutput);
        }
    }
    catch (Exception ex)
    {
        _logger.LogError(ex, ex.Message);                
    }

这是下载方法,它创建了我想在HttpContext.Response.Body中返回的json:

    public async Task Download(string applicationId, Stream output, CancellationToken cancellationToken = default(CancellationToken))
    {       
        using (var textWriter = new StreamWriter(output, Constants.Utf8))
        {
            using (var jsonWriter = new JsonTextWriter(textWriter))
            {
                jsonWriter.Formatting = Formatting.None;
                await jsonWriter.WriteStartArrayAsync(cancellationToken);

                //write json...
                await jsonWriter.WritePropertyNameAsync("Status", cancellationToken);
                await jsonWriter.WriteValueAsync(someStatus, cancellationToken); 

                await jsonWriter.WriteEndArrayAsync(cancellationToken);
            }
        }
    }

现在,我得到一个例外:“ ASP.NET Core 3.0中不允许进行同步操作”如何在不使用AllowSynchronousIO = true的情况下更改此代码以使其工作;

XAMT

AllowSynchronousIO选项默认是禁用的,从.Net core 3.0.0-preview3在(KestrelHttpSysIIS in-processTestServer),因为这些API是线程饥饿和应用程序挂起的来源。

每个临时迁移请求都可以覆盖该选项:

var allowSynchronousIoOption = HttpContext.Features.Get<IHttpBodyControlFeature>();
if (allowSynchronousIoOption != null)
{
    allowSynchronousIoOption.AllowSynchronousIO = true;
}

您可以找到更多信息,并遵循ASP.NET Core问题跟踪器:在所有服务器中禁用AllowSynchronousIO

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类常见问题

ASP.NET Core:不允许进行同步操作。调用WriteAsync或将AllowSynchronousIO设置为true

来自分类Dev

ASP.NET Core禁用请求缓冲(不是响应缓冲)

来自分类Dev

在asp.net core 3中创建漂亮的url

来自分类Dev

覆盖ASP.NET Core 3中的授权策略

来自分类Dev

真的在ASP.NET Core中没有缓冲的文件上传吗?

来自分类Dev

Asp Net core 3的配置是否与Asp Net core 3无关?

来自分类Dev

由于不允许的MIME类型(“ text / html”),ASP Net Core内部的Angular 8被阻止

来自分类Dev

AuthorizeAttribute在ASP.NET Core 3 MVC中不执行任何操作

来自分类Dev

替换ASP.NET Core 1.0中间件中的响应流

来自分类Dev

.NET Standard和.NET Core 3.x或ASP.NET Core 3.x

来自分类Dev

共享cookie .net Core 3和Asp.net

来自分类Dev

从视图路由到Razor页面操作Asp.Net Core 3

来自分类Dev

ASP.NET Core 3 MVC端点路由和按路由进行本地化

来自分类Dev

ASP.NET Core POST 操作错误

来自分类Dev

查看在Asp.Net Core 3中的控制器中找不到动作

来自分类Dev

如何从ASP.NET Core 3.1中的EntityFrameworkCore 3中删除依赖项

来自分类Dev

在ASP.Net Core中进行模板

来自分类Dev

如何处理ASP.NET Core 3中400到500的异常

来自分类Dev

自定义AuthenticationHandler在Asp.Net Core 3中不起作用

来自分类Dev

ASP.NET Core 3中的app.UseOpenIdConnectAuthentication()和OpenIdConnectMiddleware在哪里?

来自分类Dev

JsonIgnore属性保留ASP.NET Core 3中的序列化属性

来自分类Dev

带有JSON参数的HttpPost在ASP.NET Core 3中不起作用

来自分类Dev

如何在asp.net core 3中添加全局路由前缀?

来自分类Dev

在ASP.NET Core 3中使用来自单独类的Hub

来自分类Dev

在Identity Asp.net core 3 MVC中创建服务IUserStore时出错

来自分类Dev

如何在asp.net Core 3中更改默认端口

来自分类Dev

在Rider中反编译ASP.NET Core 3.x源

来自分类Dev

Asp .Net Core 3中Challenge的确切含义是什么?

来自分类Dev

如何在ASP.NET Core 3中解析本地文件路径?

Related 相关文章

  1. 1

    ASP.NET Core:不允许进行同步操作。调用WriteAsync或将AllowSynchronousIO设置为true

  2. 2

    ASP.NET Core禁用请求缓冲(不是响应缓冲)

  3. 3

    在asp.net core 3中创建漂亮的url

  4. 4

    覆盖ASP.NET Core 3中的授权策略

  5. 5

    真的在ASP.NET Core中没有缓冲的文件上传吗?

  6. 6

    Asp Net core 3的配置是否与Asp Net core 3无关?

  7. 7

    由于不允许的MIME类型(“ text / html”),ASP Net Core内部的Angular 8被阻止

  8. 8

    AuthorizeAttribute在ASP.NET Core 3 MVC中不执行任何操作

  9. 9

    替换ASP.NET Core 1.0中间件中的响应流

  10. 10

    .NET Standard和.NET Core 3.x或ASP.NET Core 3.x

  11. 11

    共享cookie .net Core 3和Asp.net

  12. 12

    从视图路由到Razor页面操作Asp.Net Core 3

  13. 13

    ASP.NET Core 3 MVC端点路由和按路由进行本地化

  14. 14

    ASP.NET Core POST 操作错误

  15. 15

    查看在Asp.Net Core 3中的控制器中找不到动作

  16. 16

    如何从ASP.NET Core 3.1中的EntityFrameworkCore 3中删除依赖项

  17. 17

    在ASP.Net Core中进行模板

  18. 18

    如何处理ASP.NET Core 3中400到500的异常

  19. 19

    自定义AuthenticationHandler在Asp.Net Core 3中不起作用

  20. 20

    ASP.NET Core 3中的app.UseOpenIdConnectAuthentication()和OpenIdConnectMiddleware在哪里?

  21. 21

    JsonIgnore属性保留ASP.NET Core 3中的序列化属性

  22. 22

    带有JSON参数的HttpPost在ASP.NET Core 3中不起作用

  23. 23

    如何在asp.net core 3中添加全局路由前缀?

  24. 24

    在ASP.NET Core 3中使用来自单独类的Hub

  25. 25

    在Identity Asp.net core 3 MVC中创建服务IUserStore时出错

  26. 26

    如何在asp.net Core 3中更改默认端口

  27. 27

    在Rider中反编译ASP.NET Core 3.x源

  28. 28

    Asp .Net Core 3中Challenge的确切含义是什么?

  29. 29

    如何在ASP.NET Core 3中解析本地文件路径?

热门标签

归档