2017-08-15 60 views
0

我有一個.Net核心應用程序,我剛剛從1.1更新到2.0。 我遇到的問題是正在返回的json。 json包含一個JavaScript Web令牌(JWT)。.Net Core 2.0 API返回屬性名稱周圍的引號json

我有控制終端,看起來像這樣...

[Microsoft.AspNetCore.Mvc.Route("getToken")] 
    [Microsoft.AspNetCore.Authorization.AllowAnonymous] 
    public IActionResult Post([Microsoft.AspNetCore.Mvc.FromBody] ApplicationUser applicationUser) 
    { 
      var authTokenJson = _authTokenService.GetTokenJson(_jwtOptions, applicationUser); 
      return Ok(authTokenJson.Result); 
    } 

在1.1版本的瀏覽器控制檯打印時從這個端點的響應看起來像這樣...

enter image description here

升級到2.0後它現在看起來像這樣...

enter image description here

請注意,屬性名稱現在用引號引起來。這會導致嘗試處理該對象的前端AngularJS應用程序出現問題。

有誰知道爲什麼發生這種情況,以及如何解決它?

+5

*「。Net Core 2.0 API返回json與屬性名稱之間的引號」*好!那就是有效的JSON。請注意,您在第一個屏幕截圖中查看的內容不是JSON,而是解析對象。你的第二個截圖可能是JSON(字符串),但很難說明這一點。所以這就是你需要了解的:爲什麼它不再被解析? –

回答

3

謝謝您的意見。

我發現,與1.1格式,我能夠在前端做是爲了脫身......

this.currentToken = <string>response.json().access_token; 

,但使用新的格式現在我必須添加像.parse通話這...

this.currentToken = <string> JSON.parse(response.json()).access_token; 

它現在按預期工作。

1

asp.core .NET 1.1

[HttpPost] 
    public async Task<IActionResult> PostAsync([FromBody]GraphQLQuery query) 
    { 
     ... 
     var json = _writer.Write(result); 
     var rr = new ObjectResult(json) { StatusCode = (int)httpResult }; 
     return rr; 
    } 

asp.core .NET 2.0

[HttpPost] 
    public async Task<IActionResult> PostAsync([FromBody]GraphQLQuery query) 
    { 
     ... 
     var json = _writer.Write(result); 
     dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject<dynamic>(json); 
     var rr = new ObjectResult(obj) { StatusCode = (int)httpResult }; 
     return rr; 
    } 

這些功能中的兩個返回它們各自的平臺上相同的結果。 1.1版本可能將json字符串解釋爲必須變成動態的json,而在2.0中它只是一個字符串。