.net - 将值从 Angular 应用程序发布到 .Net Core WebAPI 时忽略时区
问题描述
我将以下 JSON 从我的Angular
应用程序发布到.Net Core WebAPI
:
{CompanyBillingHireRateId: 4, CompanyId: 44, AccountId: null, EquipmentId: 128, EffectiveDate: Sun Dec 29 2019 00:00:00 GMT+0200 (South Africa Standard Time)}
如您所见, 的值EffectiveDate
如下:EffectiveDate: Sun Dec 29 2019 00:00:00 GMT+0200 (South Africa Standard Time)
下面是我的 .Net Core 控制器方法:
[HttpPut("billing/hirerates/update")]
public async Task<IActionResult> UpdateNewCompanyBillingHireRateAsync([FromBody] CompanyBillingHireRateViewModel model)
{
try
{
var success = await _companyFacade.UpdateCompanyBillingHireRates_Async(model).ConfigureAwait(false);
if (success)
return Created("", success);
return StatusCode((int)HttpStatusCode.BadRequest);
}
catch (CustomException cEx)
{
await _customExceptionProcess.ProcessCustomException(cEx).ConfigureAwait(false);
return StatusCode(cEx.StatusCode, new { Message = cEx.FriendlyMessage ?? "" });
}
}
在我的 .Net 应用程序中,EffectiveDate
收到的是:{2019/12/28 22:00:00 +00:00}
在我的 .NetStartup.cs
中,我试图将 API 配置为忽略时区,并按原样保留接收到的日期值,并转换为datetime
.Net 中的对应值,但未能这样做。这是我的启动,cs配置:
services.AddControllers().AddNewtonsoftJson(setup =>
{
setup.SerializerSettings.ContractResolver = new DefaultContractResolver();
setup.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
setup.SerializerSettings.DateFormatHandling = Newtonsoft.Json.DateFormatHandling.IsoDateFormat;
setup.SerializerSettings.DateParseHandling = Newtonsoft.Json.DateParseHandling.None;
setup.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;
});
如何将 API 配置为忽略时区,并将 JSON 值读取为字符串,然后解析为从 Angular UI 接收到的相应日期?
解决方案
这就是我为我的项目解决这个问题所做的:
由于 Angular 在浏览器中运行,并且您的浏览器使用local time
,因此我更改了我的 API 以相应地处理此问题,如下所示:
services.AddControllers().AddNewtonsoftJson(setup =>
{
setup.SerializerSettings.ContractResolver = new DefaultContractResolver();
setup.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
setup.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Local;
});
推荐阅读
- android - 在 windows 上通过命令行将 tensorflow 模型转换为 tflite 模型时遇到问题
- apache-spark - 有没有办法使用 readStream() 方法从 HashSet 读取数据作为火花结构化流?
- c - 带有 c2hs 的 Haskell FFi:更好的结构外编组
- mongodb - 关系的 GraphQL 解析器
- c - 为什么 int 与 C 中的 long 大小相同?
- java - 更新子实体但保存父实体会导致 ObjectOptimisticLockingFailureException
- node.js - Azure Function Javascript (NodeJS) CosmosDB 查询
- c++ - 错误是什么?Q-确定并打印给定 n 值的以下谐波级数之和。(1+1/2+1/3+........+1/n)
- c# - 如何使用 mvc 控制器使用多个参数化的 web api
- r - 将新行添加到具有列表类型列的数据框