[英]Servicestack POSTing DateTime issue
奇怪的是,这在本地有效,但是当它部署到Azure网站时却无法
在Azure上失败的POST
变量是:
name=Test&venue=1&fromDate=26%2F06%2F14&toDate=01%2F07%2F14&eventType=1
如果我发布以下内容,则可以使用:
name=Test&venue=1&eventType=1
因此,这一定与日期格式有关。
请求上的数据类型为DateTime
,如果我将其设置为字符串,则可以正常工作-然后可以调用request.ConvertTo<Model>
,一切都按预期传递。 我只是不想在请求上将fromDate和toDate设置为字符串。
有谁知道为什么这会失败?
这看起来像是一个全球化问题。 Azure服务器将使用en-US
文化,期望以mm/dd/yy
格式进行解析。
但是,您使用的是英国日期格式dd/mm/yy
,因此文化为en-GB
。 您的开发机器将设置为已使用en-GB
区域设置,因此在本地测试时没有问题。
您可以在web.config
指定区域性:
<configuration>
<system.web>
<globalization uiCulture="en-GB" culture="en-GB" />
</system.web>
</configuration>
或者,您可以在运行时通过global.asax
:
public void PreRequestHandlerExecute(object sender, EventArgs e)
{
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en-GB");
}
或者,您可以修改ServiceStack.Text如何反序列化DateTime
,但是我不推荐这种方法。 在AppHost
Configure
方法中:
JsConfig<DateTime>.DeSerializeFn = date => DateTime.ParseExact(date, "dd/MM/yy", CultureInfo.InvariantCulture);
希望能有所帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.