我在Breeze的JsonMediaTypeFormatter
的设置中遇到问题。 我会做的是,由WebAPI 发送和接收的json日期始终以UTC工作。Breeze的WebApi控制器如何使用UTC DateTime?
据this document,它将通过为JsonSerializerSettings
但是没有工作的性质DateTimeZoneHandling
设置为DateTimeZoneHandling.Utc
成为可能。
调查this source code,我意识到可能会影响此行为的是对this other issue所做的破解。
通过删除所有此代码的波纹管,一切正常。
//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。
EDIT 2
首先,我已经更新了微风LIB到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());
}
}
}
其次,我创建了一个CustomBreezeConfig.cs类(周杰伦下面描述的代码),一,我叫BreezeConfig文件夹中,但这个新的尝试没有奏效。
问候,
贝尔纳多·帕切科
请让我们知道这是否解决了它。如果是这样,请检查答案下的复选标记。这样做会帮助我们解决这个问题。谢谢。 – Ward
@Jay我保留了相同的代码(上面描述的BreezeWebApiConfig.cs类和CustomBreezeConfig.cs类)并更新至v 0.80.5。但是,服务器发送给客户端的json日期仍然不是UTC(最后没有Z)。问候。 –
Bernardo,它不会是,但它会在客户端上正确转换(到UTC日期)这就是DataType.parseDateFromServer方法的作用。所以看看当时调用返回的结果中的日期。 –