Как использовать IObjectAdapter с JsonPatch? - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь предотвратить исправление определенных свойств DTO при вызове patch.ApplyTo(object, adapter).Мой текущий план состоит в том, чтобы поместить пользовательский атрибут в свойства, которые следует игнорировать, и, используя этот адаптер, разрешать выполнение операций только в том случае, если путь, используемый в этой операции, не содержит имени свойства, которое следует игнорировать.Например.

class CustomAdapter : IObjectAdapter
{
    public void Add(Operation operation, object objectToApplyTo)
    {
        if (pathIsValid(operation.path)) {
            // Actually do the adding somehow
        }
    }
}

Может быть, это глупый вопрос, но я не могу найти какую-либо информацию о том, как сделать фактическое добавление части.На самом деле, я не могу найти никаких ссылок на то, как это (IObjectAdapter) предполагается использовать с JsonPatch, кроме перегрузки для передачи адаптера.

Есть ли какой-то способ, которым я могувызвать реализацию по умолчанию для любой данной операции?operation.Apply() существует, но для него требуется адаптер в качестве второго параметра - что такое «адаптер по умолчанию» в JsonPatch?Или есть лучший / встроенный способ сделать это полностью?

1 Ответ

0 голосов
/ 16 июля 2019

Вот как я решил эту проблему ...

[HttpPatch("profile")]
public async Task<IActionResult> Update([FromBody]JsonPatchDocument<User> userPatch)
{
    string[] validFields = new[] { "/name" };
    if (userPatch.Operations.Where(o => !validFields.Contains(o.path)).Count() > 0)
    {
        // invalid field
    }

Так что я вообще не использовал IObjectAdapter.

...