c# - 如何在 Asp.net Web API 中使用特定的 CultureInfo

标签 c# json date asp.net-web-api date-formatting

我最近将 WEB API 添加到现有的 VS 桌面应用程序并且一切正常,直到昨天我不得不添加一个采用三个参数的 GET 方法,其中一个是日期。 好吧,一开始我以为那​​是小菜一碟,但令我惊讶的是,当我在安装应用程序的服务器上发送 2014/07/09(7 月 9 日)时,它被视为 2014/09/07(9 月 7 日),因此我所有的比较都没有奏效。

我已经尝试过诸如从 GET 方法更改为 POST 方法、将我的区域和语言选项设置更改为服务器上的相同设置、将日期作为字符串传递、使用以下部分在服务器上创建 Datetime 对象等操作字符串。不幸的是,它们都不起作用。

然后我记得这个桌面应用程序在其 WCF 项目(我现在将其传递给 Web API)中有一些方法可以毫无问题地传递日期。查看代码一段时间后,我发现他们在使用日期的 WCF 项目的每个类上都使用了类似的东西:

Imports System.Globalization
Imports System.Security.Permissions
Imports System.Threading

Public Class ServicioRemotoVentas
    Implements IServicioRemotoVentas        
    Public Sub New()
        MyBase.New()
        Thread.CurrentThread.CurrentCulture = New CultureInfo("es-PE", False)
    End Sub

当然,这个 Thread.CurrentThread.CurrentCulture = New CultureInfo("es-PE", False) 一定是为了某些东西而存在的。 现在我想知道您以前是否在 Web API 中使用过类似的东西?如果是的话,你是如何以及在哪里放置这样的配置的。

这些是我电脑上的设置:

enter image description here

enter image description here

这些是服务器设置:

enter image description here enter image description here

我差点忘了提一下,我使用 yyyy/M/d 格式传递所有日期,并使用 json 传递所有其他参数。 可能是因为我没有指定要使用的文化信息,所以当字符串在 Web API 中反序列化时,这是使用系统日期格式完成的吗?或者在尝试序列化/反序列化日期时可能是 Json 错误??

一如既往,我们将不胜感激您提供的任何建议或资源。

最佳答案

如评论中所述,ASP.NET 运行时确实有针对这些情况的解决方案:它是 web.cofig元素 <globalization> - (参见 MSDN <globalization> Element)

它的结构定义为:

<configuration>
 <system.web>
  <globalization 
    enableClientBasedCulture="true|false"
    requestEncoding="any valid encoding string"
    responseEncoding="any valid encoding string"
    fileEncoding="any valid encoding string"

    responseHeaderEncoding = "any valid encoding string" 
    resourceProviderFactoryType = string
    enableBestFitResponseEncoding = "true|false"

    culture="any valid culture string"
    uiCulture="any valid culture string"/>

因此,以防万一,我们想要强制服务器/开发工作站在 en-US 中运行我们应该使用这些显式设置的文化:

<globalization 
    enableClientBasedCulture="false" 
    uiCulture="en-US" 
    culture="en-US" />

这将为任何 http 请求使用适当的(期望的和设置的)文化。

默认设置概述也很有趣:

<globalization 
    requestEncoding="utf-8" 
    responseEncoding="utf-8" 
    fileEncoding="" 
    culture="" 
    uiCulture="" 
    enableClientBasedCulture="false" 
    responseHeaderEncoding="utf-8" 
    resourceProviderFactoryType="" 
    enableBestFitResponseEncoding="false" />

在这里也可以看到类似的:

关于c# - 如何在 Asp.net Web API 中使用特定的 CultureInfo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24690879/

相关文章:

c# - UpdateProgress 不会在 UpdatePanel 内的每个 PostBack 控件上触发

c# - 在 javascript/razor 应用程序中按名称获取值

javascript - 使用 JavaScript 从 JSON 文件获取图像并在 HTML img 标签中显示

javascript - JSON 包含单引号导致语法错误

json - 如何使用 Spray Json 的默认值?

c# - Chrome 83 中取消的 HTTP 请求

c# - 如何使用 linq 加入多对多关系

java - 如何停止在 00 :00 o'clock? 更改日期

javascript - Moment 显示相对于当前日期的生日 DAYOFYEAR

ios - 如何将出生日期 UIDatePicker 添加到 UITextField?