Azure AD Graph API を使用する ASP.NET アプリケーションがあります。多くの場合、Graph API に対して無効な操作が実行されると、例外がスローされます。
次のコードは、例外をトリガーする無効な Graph API 呼び出しを示しています。
// Query the Azure AD User
var userToUpdate = await activeDirectoryClient.Users.GetByObjectId("user@domain.net").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 文字列はどのクラスにマップする必要がありますか? また、適切な逆シリアル化のために文字列からスラッシュを削除する必要がありますか?