C# 如何在Asp.net Web API中使用特定的CultureInfo
我最近在一个现有的VS桌面应用程序中添加了WebAPI,一切都很好,直到昨天我不得不添加一个GET方法,该方法包含三个参数,其中一个是日期。 好吧,起初我认为这是小菜一碟,但令我惊讶的是,当我在安装应用程序的服务器上发送2014/07/09(7月9日)时,它被视为2014/09/07(9月7日),因此我所有的比较都不起作用 我尝试过从GET方法更改为POST方法,在服务器上将区域和语言选项设置更改为相同的设置,将日期作为字符串传递。在服务器上使用字符串的部分创建了Datetime对象。不幸的是,它们都没有起作用 然后我记得这个桌面应用程序在其WCF项目上有一些方法(我现在将其传递给WebAPI),这些方法传递日期时没有任何问题。查看代码一段时间后,我发现他们在使用日期的WCF项目的每个类上都使用了类似的内容:C# 如何在Asp.net Web API中使用特定的CultureInfo,c#,json,date,asp.net-web-api,date-formatting,C#,Json,Date,Asp.net Web Api,Date Formatting,我最近在一个现有的VS桌面应用程序中添加了WebAPI,一切都很好,直到昨天我不得不添加一个GET方法,该方法包含三个参数,其中一个是日期。 好吧,起初我认为这是小菜一碟,但令我惊讶的是,当我在安装应用程序的服务器上发送2014/07/09(7月9日)时,它被视为2014/09/07(9月7日),因此我所有的比较都不起作用 我尝试过从GET方法更改为POST方法,在服务器上将区域和语言选项设置更改为相同的设置,将日期作为字符串传递。在服务器上使用字符串的部分创建了Datetime对象。不幸的是,
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中使用过类似的东西?如果是这样的话,您是如何以及在何处放置这样的配置的
以下是我的电脑上的设置:
以下是服务器设置:
<globalization
enableClientBasedCulture="false"
uiCulture="en-US"
culture="en-US" />
我几乎忘了提到,我使用这种格式传递所有日期,而所有其他参数都使用json。
是否因为我没有指定要使用的区域性信息,所以当字符串在Web API中反序列化时,这是使用系统日期格式来完成的??或者,在尝试序列化/反序列化日期时可能是Json错误
一如既往,我们将非常感谢您提供的任何建议或资源。如评论中所述,ASP.NET运行时确实为这些场景提供了解决方案:它是web.cofig
元素-(请参阅MSDN)
其结构定义为:
<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"/>
这将为任何http请求使用适当的(期望的和设置的)区域性
同样有趣的是默认设置概述:
<globalization
requestEncoding="utf-8"
responseEncoding="utf-8"
fileEncoding=""
culture=""
uiCulture=""
enableClientBasedCulture="false"
responseHeaderEncoding="utf-8"
resourceProviderFactoryType=""
enableBestFitResponseEncoding="false" />
请参见此处的类似内容:
- 还有它本身
请尝试阅读此内容,它可以为您提供一些想法,如何设置web.config。。。也许这会有帮助。@RadimKöhler谢谢,我会尝试一下,但是对于asp.net MVC来说,这看起来更像是一个问题,我的问题是Web api。这个设置,是运行时设置,也就是说,不管asp.net、MVC、Web api。。这是一种方式,如何说明服务器上的默认区域性是什么(运行时会关心我们在任何线程上设置它),或者我们是否会使用用户区域性(在web api中使用JSON…独立于区域性的格式不是一种好方法)@RadimKöhler感谢它的魅力所在。很抱歉从一开始就不信任你。只是我在WebApiConfig.cs或Global.asax中看到一些试图改变这一点的页面,我认为您误解了我在问题中所描述的内容。所以非常感谢你,再一次抱歉