public override void ExecuteResult(ControllerContext context) { Guard.ArgumentNotNull(() => context); if (this.Data == null) { return; } if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && context.HttpContext.Request.HttpMethod.IsCaseInsensitiveEqual("GET")) { throw new InvalidOperationException("This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request.To allow GET requests, set JsonRequestBehavior to AllowGet."); } var response = context.HttpContext.Response; if (this.ContentEncoding != null) { response.ContentEncoding = this.ContentEncoding; } response.ContentType = this.ContentType.NullEmpty() ?? "application/json"; var serializerSettings = _settings ?? new JsonSerializerSettings { MissingMemberHandling = MissingMemberHandling.Ignore, // Limit the object graph we'll consume to a fixed depth. This prevents stackoverflow exceptions // from deserialization errors that might occur from deeply nested objects. MaxDepth = 32, // Do not change this setting // Setting this to None prevents Json.NET from loading malicious, unsafe, or security-sensitive types TypeNameHandling = TypeNameHandling.None }; if (_settings == null) { serializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.RoundtripKind; serializerSettings.DateFormatHandling = DateFormatHandling.MicrosoftDateFormat; var utcDateTimeConverter = new UTCDateTimeConverter(_dateTimeHelper, new JavaScriptDateTimeConverter()); serializerSettings.Converters.Add(utcDateTimeConverter); } using (var jsonWriter = new JsonTextWriter(response.Output)) { jsonWriter.CloseOutput = false; var jsonSerializer = JsonSerializer.Create(serializerSettings); jsonSerializer.Serialize(jsonWriter, this.Data); } }
public override void ExecuteResult(ControllerContext context) { Guard.NotNull(context, nameof(context)); if (this.Data == null) { return; } if (this.JsonRequestBehavior == JsonRequestBehavior.DenyGet && context.HttpContext.Request.HttpMethod.IsCaseInsensitiveEqual("GET")) { throw new InvalidOperationException("This request has been blocked because sensitive information could be disclosed to third party web sites when this is used in a GET request.To allow GET requests, set JsonRequestBehavior to AllowGet."); } var response = context.HttpContext.Response; if (this.ContentEncoding != null) { response.ContentEncoding = this.ContentEncoding; } response.ContentType = this.ContentType.NullEmpty() ?? "application/json"; var serializerSettings = _settings ?? CreateDefaultSerializerSettings(); if (_settings == null) { var utcDateTimeConverter = new UTCDateTimeConverter(_dateTimeHelper, new JavaScriptDateTimeConverter()); serializerSettings.Converters.Add(utcDateTimeConverter); } using (var jsonWriter = new JsonTextWriter(response.Output)) { jsonWriter.CloseOutput = false; var jsonSerializer = JsonSerializer.Create(serializerSettings); jsonSerializer.Serialize(jsonWriter, this.Data); } }