2014-03-19 105 views
1

古怪,這個本地工作,但是當它部署到Azure的網站也沒有Servicestack POST操作日期時間問題

POST變量在Azure上失敗的是:

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設置爲請求中的字符串。

有誰知道爲什麼會失敗?

回答

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,但我不會推薦這種方法。在AppHostConfigure方法:

JsConfig<DateTime>.DeSerializeFn = date => DateTime.ParseExact(date, "dd/MM/yy", CultureInfo.InvariantCulture); 

希望有所幫助。

+0

將其添加到web.config似乎工作 - 歡呼夥計 – iwayneo

+0

@iwayneo真棒:) – Scott