簡體   English   中英

ASP.Net API DateTime ISO8601 日期值在生產中被解析為默認日期 (01/01/0001 00:00:00) & Azure

[英]ASP.Net API DateTime ISO8601 date value being parsed as default date (01/01/0001 00:00:00) in production & Azure

當我們的 API 解析帖子值時,我看到了一個問題。 這似乎只發生在實時環境中,因此在測試期間被遺漏了。

此 class 代表發布到 API 的內容:

public class LoginHistorySearch
{
    public DateTime StartDateUtc { get; set; }
    public DateTime EndDateUtc { get; set; }
}

切入核心問題,這里是作為響應返回的解析日期:

[Authorize]
[Route("Reports/LoginsByPeriod")]
public class LoginsController : ApiController
{

    public HttpResponseMessage Post([FromBody] LoginHistorySearch search) {
        return Request.CreateErrorResponse(HttpStatusCode.OK, search.StartDateUtc.ToString());
    }
}

如果我發布這些數據(目前使用 APITester.com):

{
"StartDateUtc": "2018-01-01T00:00:00Z",
"EndDateUtc": "2020-01-01T00:00:00Z"
}

我得到這個返回:

 Response Body {"Message":"01/01/0001 00:00:00"}

更奇怪的是,如果我使用 Postman 發布,那么我會看到 IIS 404 錯誤。 誰能解釋一下?

更新

  1. 發布到 Azure 應用服務 - 看到相同的結果
  2. Windows 服務器使用 en-GB 語言環境(英國)
  3. 將 DateTime.Kind 添加到 class 中的設置器以強制執行 UTC

在仔細檢查每個設置后,發現Content-Type header 在為實時站點創建POST時被丟棄。

手動添加它會產生所需的 output 並觸發正確的解析:

Content-Type: application/json

(血壓恢復正常率)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM