// Copyright (c) .NET Foundation. All rights reserved.
// Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information.
using System;
using Microsoft.AspNetCore.JsonPatch;
using Microsoft.AspNetCore.Mvc.ModelBinding;
namespace Microsoft.AspNetCore.Mvc
{
///
/// Extensions for
///
public static class JsonPatchExtensions
{
///
/// Applies JSON patch operations on object and logs errors in .
///
/// The .
/// The entity on which is applied.
/// The to add errors.
public static void ApplyTo(
this JsonPatchDocument patchDoc,
T objectToApplyTo,
ModelStateDictionary modelState) where T : class
{
if (patchDoc == null)
{
throw new ArgumentNullException(nameof(patchDoc));
}
if (objectToApplyTo == null)
{
throw new ArgumentNullException(nameof(objectToApplyTo));
}
if (modelState == null)
{
throw new ArgumentNullException(nameof(modelState));
}
patchDoc.ApplyTo(objectToApplyTo, modelState, prefix: string.Empty);
}
///
/// Applies JSON patch operations on object and logs errors in .
///
/// The .
/// The entity on which is applied.
/// The to add errors.
/// The prefix to use when looking up values in .
public static void ApplyTo(
this JsonPatchDocument patchDoc,
T objectToApplyTo,
ModelStateDictionary modelState,
string prefix) where T : class
{
if (patchDoc == null)
{
throw new ArgumentNullException(nameof(patchDoc));
}
if (objectToApplyTo == null)
{
throw new ArgumentNullException(nameof(objectToApplyTo));
}
if (modelState == null)
{
throw new ArgumentNullException(nameof(modelState));
}
patchDoc.ApplyTo(objectToApplyTo, jsonPatchError =>
{
var affectedObjectName = jsonPatchError.AffectedObject.GetType().Name;
var key = string.IsNullOrEmpty(prefix) ? affectedObjectName : prefix + "." + affectedObjectName;
modelState.TryAddModelError(key, jsonPatchError.ErrorMessage);
});
}
}
}