C# webapi:The';CreateJsonSerializer';方法在尝试创建JSON序列化程序时引发异常
偶尔,我们会在活动环境中的ASP.NET Web API服务模块中观察到此错误,在应用程序池回收后,问题得到解决。此错误发生在发送响应时,一旦错误开始发生,所有后续请求都会因相同的错误而失败。但是,我们无法在较低的环境中重现此错误。即使使用简单的GET方法,也会出现错误 “stacktrace”:“在Sy stem.Net.Http.Formatting.BaseJsonMediaTypeFormatter.CreateJsonSerializerInternal()\r\n 在 System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStream(类型 类型、对象值、流写入流、编码 有效编码)\r\n位于 System.Net.Http.Formatting.JsonMediaTypeFormatter.WriteToStream(类型 类型、对象值、流写入流、编码 有效编码)\r\n位于 System.Net.Http.Formatting.BaseJsonMediaTypeFormatter.WriteToStreamAsync(类型 类型、对象值、流writeStream、HttpContent、, TransportContext TransportContext,CancellationToken cancellationToken)\r\n---来自上一个位置的堆栈结束跟踪 引发异常的位置---\r\n System.Runtime.CompilerServices.TaskWaiter.ThrowForNonSuccess(任务 任务)\r\n位于 System.Runtime.CompilerServices.TaskWaiter.HandleNonSuccessAndDebuggerNotification(任务 任务)\r\n位于 System.Web.Http.WebHost.HttpControllerHandler.d_u1b.MoveNext()“, “异常类”:“系统无效操作异常”,C# webapi:The';CreateJsonSerializer';方法在尝试创建JSON序列化程序时引发异常,c#,asp.net,asp.net-web-api,asp.net-web-api2,C#,Asp.net,Asp.net Web Api,Asp.net Web Api2,偶尔,我们会在活动环境中的ASP.NET Web API服务模块中观察到此错误,在应用程序池回收后,问题得到解决。此错误发生在发送响应时,一旦错误开始发生,所有后续请求都会因相同的错误而失败。但是,我们无法在较低的环境中重现此错误。即使使用简单的GET方法,也会出现错误 “stacktrace”:“在Sy stem.Net.Http.Formatting.BaseJsonMediaTypeFormatter.CreateJsonSerializerInternal()\r\n 在 System.
“异常消息”:“CreateJsonSerializer”方法引发 尝试创建JSON序列化程序时发生异常 " 如果有人遇到此错误,请分享您的想法。问题 我们最近遇到了一个与上述症状相同的问题
- 在.Net Framework 4.6.1上使用IIS和ASP.Net Web API的网站
- Web API请求在一段时间内运行良好,直到JSON序列化开始失败,导致参数绑定错误,如所述
- 回收应用程序池或重新启动网站修复了该问题
public FruitController() {
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new AppleConverter());
GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new PearConverter());
}
这意味着对于每个新的HTTP请求上下文,转换器被重新添加到静态转换器列表中。这就产生了两个问题,
public class WebApiApplication : HttpApplication
{
protected void Application_Start()
{
/// ...
var converters = GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.Converters;
converters.Add(new FruitConverter());
converters.Add(new PearConverter());
}
}