我在 Breeze 的设置中遇到问题JsonMediaTypeFormatter
。我要做的是WebAPI发送和接收的json日期总是在UTC中工作。
根据此文档,可以通过将属性DateTimeZoneHandling
设置DateTimeZoneHandling.Utc
为JsonSerializerSettings
然而这并没有奏效。
调查此源代码后,我意识到可能会影响此行为的是针对其他问题所做的破解。
通过删除下面的所有这些代码,一切正常。
//jsonSerializerSettings.Converters.Add(new IsoDateTimeConverter
//{
// DateTimeFormat = "yyyy-MM-dd\\THH:mm:ss.fffK"
//});
我该如何处理这种情况而无需删除 Hack?
编辑 1
我第一次尝试设置如下:
var jsonFormatter = Breeze.WebApi.JsonFormatter.Create();
jsonFormatter.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
jsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
jsonFormatter.SupportedEncodings.Add(new UTF8Encoding(false, true));
GlobalConfiguration.Configuration.Formatters.Insert(
0, jsonFormatter);
但这不起作用,返回的日期不是UTC。
编辑 2
首先,我已将 Breeze 库更新为 0.80.3 版本。
在我的 App_Start 文件夹中,我有这个 BreezeWebApiConfig.cs 文件:
[assembly: WebActivator.PreApplicationStartMethod(
typeof(Partner.App_Start.BreezeWebApiConfig), "RegisterBreezePreStart")]
namespace Partner.App_Start
{
public static class BreezeWebApiConfig
{
public static void RegisterBreezePreStart()
{
GlobalConfiguration.Configuration.Routes.MapHttpRoute(
name: "BreezeApi",
routeTemplate: "api/{controller}/{action}"
);
var jsonFormatter = Breeze.WebApi.JsonFormatter.Create();
jsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json"));
jsonFormatter.SupportedEncodings.Add(new UTF8Encoding(false, true));
GlobalConfiguration.Configuration.Formatters.Insert(
0, jsonFormatter);
// Apply query parameters, expressed as OData URI query strings,
// to results of Web API controller methods that return IQueryable<T>
GlobalConfiguration.Configuration.Filters.Add(
new Breeze.WebApi.ODataActionFilter());
}
}
}
其次,我在一个名为 BreezeConfig 的文件夹中创建了一个 CustomBreezeConfig.cs 类(Jay 描述了下面的代码),但是这个新尝试没有奏效。
问候,
贝尔纳多·帕切科