2016-09-29 36 views
1

我有兩個不同的API端點。兩個控制器都繼承ApiController。兩個都返回一個對象,每個對象都有一個DateTime類型的字段。爲什麼同一個API中的不同端點返回不同的日期格式?

API 1:

[Route("OtherThings/{otherThingId:guid}/FirstThing", Name = "GetFirstThing")] 
[HttpGet] 
[ResponseType(typeof(Response1))] 
public IHttpActionResult GetFirstThing(Guid otherThingId, [FromUri] DateTime? modifiedDate = null) 
{ 
    var things = GetThings(otherThingId, modifiedDate); 
    if (!things.Any()) 
    { 
     return NotFound(); 
    } 

    return Ok(new Response1(things.First())); 
} 

其中響應1被定義爲:

public class ReadingProgressResponse 
{ 
    public DateTime DateTime { get; set; } 
    // and other properties 
} 

樣品響應:

{ 
    "dateTime": "2016-09-28T14:30:26" 
} 

API 2

[HttpGet] 
[Route("{someId:guid}", Name = "SomeName")] 
[ResponseType(typeof (Response2))] 
public IHttpActionResult GetResponse2(Guid someId) 
{ 
    var data = GetSomeData(someId); 

    return Ok(new Response2(data)); 
} 

其中Response2定義爲:

public class ScreenSessionResponse 
{ 
    public DateTime ExpirationTime { get; set; } 
    // and other fields 
} 

示例響應:

{ 
    "expirationTime": "2016-09-28T14:48:09Z" 
} 

注意,API 1不具有 「Z」 的日期的結束,但是API 2確實。

爲什麼?我是否可以控制響應格式化的方式?

回答

1

是的,你可以控制如何格式化日期。

試試這個代碼在您的global.asax的OnStart方法:

// Convert all dates to UTC 
var json = GlobalConfiguration.Configuration.Formatters.JsonFormatter; 
json.SerializerSettings.DateTimeZoneHandling = Newtonsoft.Json.DateTimeZoneHandling.Utc; 

欲瞭解更多信息,看看here

相關問題