相关疑难解决方法(0)

Asp.Net Web Api - ModelBinders

我需要使用某种自定义模型绑定器来处理英国格式的传入日期,我已经设置了自定义模型绑定器并注册如下:

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控制器以使用我的模型绑定器?

model-binding asp.net-mvc-4 asp.net-web-api

14
推荐指数
2
解决办法
8073
查看次数

AspNet Core 中 UTC 中的 Http 查询参数

我遇到了一个我无法弄清楚的问题。

我尝试在服务器端始终处理 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)

c# datetime utc iso8601 asp.net-core-mvc

3
推荐指数
1
解决办法
5089
查看次数