我将ASP.NET与WebApi(Rest)和AngularJS一起使用。如果我将DateTime对象从Client(Angular)发送到Server(C#),我会收到由于时区而导致的扭曲(-2小时)日期。所以我决定使用Automapper。
我目前的代码如下:
AutoMapperConfiguration.cs:
public class AutoMapperConfiguration
{
public void Configure()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<DateTime, DateTime>().ConvertUsing<UtcToLocalConverter>();
});
}
}
UtcToLocalConverter.cs:
public class UtcToLocalConverter : AutoMapper.ITypeConverter<DateTime, DateTime>
{
public DateTime Convert(DateTime source, DateTime destination, ResolutionContext context)
{
var inputDate = source;
if (inputDate.Kind == DateTimeKind.Utc)
{
return inputDate.ToLocalTime();
}
return inputDate;
}
}
的Global.asax.cs:
public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
new AutoMapperConfiguration().Configure();
//...some more stuff...
}
}
我想拥有DateTime类型的所有对象,我从客户端自动转换,但这不会发生在这段代码中。我错了什么?有人可以帮我解决这个问题吗?
提前致谢。
答案 0 :(得分:1)
我注意到从旧版本更新后使用AutoMapper进行了更改(我的版本非常旧)。即使使用DateTimes的地图配置,从AutoMapper映射的对象最终会在转换方法之后将日期转换为UTC时间自定义转换器。查看发行说明可能会有所帮助。我还没有找到防止这种情况发生的选择。
另外,检查您的配置设置是否正在使用。
创建配置对象后是否需要调用initialize?
AutoMapper.Mapper.Initialize(cfg);
所以...
public void Configure()
{
var config = new MapperConfiguration(cfg =>
{
cfg.CreateMap<DateTime, DateTime>().ConvertUsing<UtcToLocalConverter>();
});
AutoMapper.Mapper.Initialize(cfg);
}