C#System.Net.Http.StringContent()在运行时出现异常

C#System.Net.Http.StringContent()在运行时出现异常,c#,C#,下面的代码使用System.Net.Http.StringContent()的构造函数。以下代码由我的应用程序中的多个线程执行 public static HttpContent GetContent(this object model) { var body = JsonConvert.SerializeObject(model, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling

下面的代码使用System.Net.Http.StringContent()的构造函数。以下代码由我的应用程序中的多个线程执行

public static HttpContent GetContent(this object model)
    {
        var body = JsonConvert.SerializeObject(model, Formatting.Indented, new JsonSerializerSettings() { NullValueHandling = NullValueHandling.Ignore });           
        var content = new StringContent(body, Encoding.UTF8, "application/json");
        content.Headers.ContentType = new MediaTypeHeaderValue("application/json");
        return content;
    }
在执行上述代码的过程中,我们得到了Null引用异常。“身体” param只是一个字符串变量,我们确认它不为null。以下是堆栈跟踪:

System.NullReferenceException:对象引用未设置为 对象的实例。在System.Text.Encoding.get_WebName()处 System.Net.Http.StringContent..ctor(字符串内容、编码、, 字符串(mediaType)位于 AW.Api.Client.Extensions.HttpExtensions.GetContent(对象模型, 字符串内容类型)

StringContent()正在尝试访问Encoding.cs的WebName属性,并在看到Encoding.cs的库代码时,


我们可以注意到,在访问属性“WebName”时,一个私有字段“dataItem”在空检查后被引用。有谁能帮助理解这里可能出现的问题吗?是否存在竞态条件的可能性,其中一个线程引用“dataItem”,而另一个线程将其设置为null。

此代码行似乎不是真正的异常行

尝试检查引用变量“content”的行

下面是代码示例,我假设您使用System.Net.Http.HttpClient

            using (HttpClient client = new HttpClient())
            {
                var content = new StringContent(body, Encoding.UTF8, "application/json");
                client.BaseAddress = new Uri(url);
                client.DefaultRequestHeaders.Clear();
                //                              below is the variable content
                var response = await client.PostAsync(url, content).ConfigureAwait(true);
                if (!response.IsSuccessStatusCode) throw new FileNotFoundException();
                var responseContent = response.Content;
                return await responseContent.ReadAsStringAsync().ConfigureAwait(true);
            }

您提到了多线程,
body
线程安全吗?是否有可能将其设置为空ect?如果没有,那么您可能已经发现了一个bug,如果是这样的话,您可能希望在github上发布一篇关于itAmen的帖子,以回应michael的评论-我们真的需要了解更多关于body变量的生命周期和范围的信息谢谢
body
是局部变量,我们将其设置为非空值,并且是线程安全的。另外,如果
body
为null,则StringContent()会立即给出异常。因此,
body
的另一个指针不为空。你能给出一个可复制的例子吗?不幸的是不能。这在我们的构建管道中只发生过一次,并导致测试失败。