我有一個使用Azure AD Graph API的ASP.NET應用程序。通常,當對Graph API執行無效操作時,會引發異常。反序列化OData.Error消息
下面的代碼顯示一個無效的圖形API調用,將觸發異常:
// Query the Azure AD User
var userToUpdate = await activeDirectoryClient.Users.GetByObjectId("[email protected]").ExecuteAsync();
// Set given name to an empty string (not allowed)
userToUpdate.GivenName = "";
try
{
// Update the user in Azure AD
await userToUpdate.UpdateAsync();
}
catch (Exception e)
{
// Return exception message
}
內部異常的消息是JSON字符串與前進的每個引號之前斜槓。它看起來是這樣的:
"{\"odata.error\":{\"code\":\"Request_BadRequest\",\"message\":{\"lang\":\"en\",\"value\":\"Invalid value specified for property 'givenName' of resource 'User'.\"},\"values\":[{\"item\":\"PropertyName\",\"value\":\"givenName\"},{\"item\":\"PropertyErrorCode\",\"value\":\"InvalidValue\"}]}}"
我想這個JSON轉換爲.NET對象返回信息的錯誤細節。我使用的JSON.NET庫這一點,我假定JSON將反序列化到一個ODataError
對象:
var error = Newtonsoft.Json.JsonConvert.DeserializeObject<ODataError>(e.InnerException.Message);
然而,反序列化對象總是具有null
的值,這意味着該轉化不按預期工作。
這就是說,上面的JSON字符串映射到哪個類?另外,我是否應該從正確的反序列化中去除字符串中的正斜槓?
你想做什麼?你如何進行OData呼叫以及你使用哪個客戶端?什麼是異常的類型? ODataErrorException已經有[Error](https://msdn.microsoft.com/en-us/library/microsoft.odata.core.odataerrorexception.error(v = vs.113).aspx#P:Microsoft.OData。 Core.ODataErrorException.Error)屬性與反序列化的錯誤。在其他情況下,異常消息將包含客戶端生成的特定消息(可能是在反序列化任何特定錯誤消息之後),而不是原始Json部分。您需要閱讀回覆才能獲得原始json –
Hi @PanagiotisKanavos,謝謝您的評論。我已經用更多的代碼示例更新了這個問題,並且希望我澄清了我正在努力完成的任務。請讓我知道是否需要進一步解釋它的任何部分。 – miguelarcilla
你還沒有解釋 - 拋出異常的類型是什麼?如果它是ODataErrorException,則不必執行任何操作,只需捕獲正確的異常類型即可。至於生Json,你不會在異常對象中找到它。 –