我需要使用某种自定义模型绑定器来处理英国格式的传入日期,我已经设置了自定义模型绑定器并注册如下:
GlobalConfiguration.Configuration.BindParameter(typeof(DateTime), new DateTimeModelBinder());
Run Code Online (Sandbox Code Playgroud)
这似乎只适用于查询字符串参数,并且只有在我的参数上指定[ModelBinder]时才有效,是否有办法让所有操作都使用我的模型绑定器:
public IList<LeadsLeadRowViewModel> Get([ModelBinder]LeadsIndexViewModel inputModel)
Run Code Online (Sandbox Code Playgroud)
另外,如何将我发布的表单发送到我的Api控制器以使用我的模型绑定器?
我遇到了一个我无法弄清楚的问题。
我尝试在服务器端始终处理 UTC DateTime。
我有一个 AspNetCore Mvc 应用程序,其端点接受可能包括 DateTimes 的查询。我希望 Mvc 了解这些日期已经在 UTC 中,而不是“再次”转换它们。
我的系统在西班牙,(UTC +2)
如果我像这样向我的本地主机服务器发送一个 http 请求:
http://localhost:50004/api/Resources?appliesOn=2018-06-30T18:00:00.000Z
Run Code Online (Sandbox Code Playgroud)
我想让反序列化的日期时间作为 UTC 表示与以下相同的日期:
DateTime.SpecifyKind(new DateTime(2018, 6, 30, 18, 0, 0), DateTimeKind.Utc)
Run Code Online (Sandbox Code Playgroud)
但是我可以看到 Mvc 总是将日期 2018-06-30T18:00:00.000Z 转换为两个小时后: 2018-06-30 20:00:00
我试图告诉 Mvc 使用 UTC json 序列化器/反序列化器,但没有任何变化:
services
.AddMvc()
.AddJsonOptions(options =>
{
options.SerializerSettings.DateTimeZoneHandling = DateTimeZoneHandling.Utc;
});
Run Code Online (Sandbox Code Playgroud)
有没有办法在 http GET 请求中发送查询参数已经作为 UTC 日期时间的表示?我理解 ISO 8601 中的日期,如果它有后缀 Z 表示“零偏移”,应该已经解释为 UTC 日期时间。为什么 Mvc 会对此进行转换并添加 2 小时的偏移量?
任何澄清将不胜感激!
PS:这是我的端点,你可以看到没有什么特别的:
[HttpGet("")]
public IActionResult GetResources()
{
var displayUri = …Run Code Online (Sandbox Code Playgroud)