2015-08-26 14 views
0

我得到一個自引用循環錯誤「自檢查屬性爲'ApplicationInstance'的類型爲'ASP.global_asax'」的循環從PUT調用返回到web api。JSon使用Web Api的seralization錯誤

我已將此添加到網頁API配置:

 GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.All; 

現在,我得到一個不同的錯誤:

「的‘ObjectContent`1’類型沒有序列化內容類型的響應體「的應用/ json; charset = utf-8 InnerException「:ExceptionMessage」:「在'System.Web.HttpInputStream'上從'ReadTimeout'獲取值時出錯。」,「ExceptionType」:「Newtonsoft.Json.JsonSerializationException」,「StackTrace」: 「在Newtonsoft.Json.Serialization.DynamicValueProvider.GetValue(Object target)...

根據建議,我添加了「.ReferenceLoopHandling.Ignore;」配置。這修復了循環錯誤,但不是「無法讀取值」錯誤。 我在尋找治療這個問題時遇到了一些麻煩。

編輯 - 錯誤消失了。如果它是固定的,我還猶豫不決,因爲我不確定爲什麼錯誤在那裏。我通過在web api中更改我的Put代碼來讓錯誤離開。它是:

[HttpPut] 
    public IHttpActionResult Put([FromBody]RecipientDTO recipient) 
    { 
     try 
     { 
      repo.SaveUpdatedRecipient(recipient); 
      return Ok(this.GetById(recipient.RecipKey)); 
     } 
     catch (Exception ex) 
     { 
      return BadRequest(ex.ToString()); 
     } 
    } 

,現在是:

[HttpPut] 
    public HttpResponseMessage Put([FromBody]RecipientDTO recipient) 
    { 
     try 
     { 
      repo.SaveUpdatedRecipient(recipient); 
      return Request.CreateResponse(HttpStatusCode.OK); 
     } 
     catch (Exception ex) 
     { 
      ex.ToString(); 
      //ValidationMethods.GetDbValidationExceptions(ex); 
      return Request.CreateResponse(HttpStatusCode.NotFound); 
     } 
    } 

我還在工作的錯誤處理部分,但至少錯誤消失,且數據被保存。當我瞭解更多信息時,我會進行更新。任何輸入是受歡迎的。

+1

如果這個嘗試:GlobalConfiguration.Configuration.Formatters.JsonFormatte \t r.SerializerSettings.ReferenceLoopHandling = Newtonsoft .Json.ReferenceLoopHandling.Ignore; –

+0

謝謝,但沒有變化。 – BattlFrog

+0

你的PUT調用是什麼樣的? – codeMonkey

回答

1

爲了解決這個問題,下面的一行代碼添加到WebApiConfig.cs文件在您的WebAPI項目

config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore;