我得到一個自引用循環錯誤「自檢查屬性爲'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);
}
}
我還在工作的錯誤處理部分,但至少錯誤消失,且數據被保存。當我瞭解更多信息時,我會進行更新。任何輸入是受歡迎的。
如果這個嘗試:GlobalConfiguration.Configuration.Formatters.JsonFormatte \t r.SerializerSettings.ReferenceLoopHandling = Newtonsoft .Json.ReferenceLoopHandling.Ignore; –
謝謝,但沒有變化。 – BattlFrog
你的PUT調用是什麼樣的? – codeMonkey