奇怪的是,这在本地工作,但是当它部署到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设置为请求中的字符串。
有谁知道为什么会失败?
答案 0 :(得分:2)
这看起来像是一个全球化问题。 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);
希望有所帮助。