Servicestack POSTing DateTime问题

时间:2014-03-19 10:11:45

标签: c# rest datetime servicestack dto

奇怪的是,这在本地工作,但是当它部署到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设置为请求中的字符串。

有谁知道为什么会失败?

1 个答案:

答案 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);

希望有所帮助。