无法从程序集“ Microsoft.AspNetCore.Http,版本= 3.1.0.0”加载类型“ Microsoft.AspNetCore.Http.Internal.BufferingHelper”

时间:2019-12-24 08:55:06

标签: c# asp.net-core

我正在尝试将API项目从.net核心2.2升级到.net核心3.1。尝试进行API调用时遇到此异常。

  

“消息”:“无法从程序集” Microsoft.AspNetCore.Http,版本= 3.1.0.0,文化=中性,PublicKeyToken = adb9793829ddae60“中加载类型'Microsoft.AspNetCore.Http.Internal.BufferingHelper'。”,“状态码“:500,” TrackingID“:” 800000bd-0000-fe00-b63f-84710c7967bb“

我在“ github”上尝试了解决方案

请帮助我解决问题。

2 个答案:

答案 0 :(得分:4)

我知道您已经尝试过this solution ,但是我不明白该帖子的含义(请参见下面的评论)

”通过引用固定的dll而不是NuGet包,它可以工作 再次。”

但是:

我的Azure函数正在请求对象上使用EnableRewind(),以使流可搜索。我直接用EnableBuffering()进行了替换,一切都恢复了。

我正在将Azure Functions v3与.NET Core 3.1一起使用。这是我最初收到的错误:

Could not load type 'Microsoft.AspNetCore.Http.Internal.BufferingHelper' from assembly 'Microsoft.AspNetCore.Http, Version=3.1.1.0, Culture=neutral, PublicKeyToken=adb9793829ddae60'.

答案 1 :(得分:2)

因此,我使用ReadAsStringAsync方法遇到了确切的问题。您会注意到,该实现也使用EnableRewind方法。我最终只是制作了自己的ReadAsStringAsync版本。实现如下:

public static async Task<string> ReadAsStringAsync(this HttpRequest request)
        {
            request.EnableBuffering();

            string result = null;
            using (var reader = new StreamReader(
                request.Body,
                encoding: Encoding.UTF8,
                detectEncodingFromByteOrderMarks: true,
                bufferSize: 1024,
                leaveOpen: true))
            {
                result = await reader.ReadToEndAsync();
            }

            request.Body.Seek(0, SeekOrigin.Begin);

            return result;
        }