【问题标题】:How to accept ISO date format in ASP.NET Web API如何在 ASP.NET Web API 中接受 ISO 日期格式
【发布时间】:2015-01-06 03:44:35
【问题描述】:

jquery $.ajax() 从浏览器以 ISO 格式的 json 格式发送日期:yy-mm-dd(或者我可以使用 yyyy-mm-dd,如果这样更好的话)在 POST 正文中。

ASP.NET MVC4 Web API 控制器包含 DateTime 属性。

如何在任何服务器线程文化设置中获取日期值?

我试过了

 public class TestController : ApiController {

    public class PlaaniSisend
    {
        public DateTime date { get; set; }
    }


    [HttpPost]
    public HttpResponseMessage Post([FromBody] PlaaniSisend vali)
    {
      Console.Write(vali.date );
    }
  }

如果服务器线程文化日期格式不同于 ISO,vali.date 值是错误的。 如何解决此问题,以便在任何服务器文化设置中使用 ISO 日期格式进行解析?

【问题讨论】:

    标签: asp.net-mvc json asp.net-mvc-4 datetime asp.net-web-api


    【解决方案1】:

    这对我有用:我在 web.config 中定义了全球化设置:

    <globalization enableClientBasedCulture="false" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-GB" uiCulture="en-GB"/>
    

    然后,在 Global.asax.cs > Application_Start 中,我将 JsonFormatter 设置为使用当前文化:

    var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter;
    json.SerializerSettings.Culture = System.Globalization.CultureInfo.CurrentCulture;
    

    【讨论】:

      【解决方案2】:

      您可以将数据作为字符串接受,并使用特定的格式和文化对其进行解析:

      public class TestController : ApiController {
      
        public class PlaaniSisend
        {
          public string date { get; set; }
        }
      
        [HttpPost]
        public HttpResponseMessage Post([FromBody] PlaaniSisend vali)
        {
          DateTime date = DateTime.ParseExact(vali.date, "yyyy-MM-dd", CultureInfo.InvariantCulture);
          Console.Write(date);
        }
      
      }
      

      【讨论】:

      • 发布的 json 中不同的嵌套对象、数组和列表中可能有很多日期属性。回答需要将所有 DateTime 属性更改为字符串并编写手动代码来解析它们。也许在 WebAPI json 解析器或其他允许本地解析 iso 日期的地方有一些设置?如果这有帮助,我可以将浏览器发布的日期列更改为其他固定格式
      • WebAPI 中使用的 Newtosoft.JSON 中有 ISODateTimeConverter。也许可以使用它进行自动转换?
      猜你喜欢
      • 2015-05-19
      • 1970-01-01
      • 2012-11-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-09-28
      相关资源
      最近更新 更多