Я пытаюсь использовать JsonPatch в ASP.NET Core для обработки частичных обновлений модели, но у меня есть привязка проблемы, когда PATCH отправляется в действие контроллера веб-API:
Я использую небольшую библиотеку для запроса PATCH:
axios
.patch('http://localhost:8090/api/characters/1', { bookId: 1, name: 'Bob'})
.then(function () { /*...*/ })
.catch(function() { /*...*/ });
Вот необработанный запрос:
PATCH http://localhost:8090/api/characters/6 HTTP/1.1
Host: localhost:8090
Connection: keep-alive
Content-Length: 30
Accept: application/json, text/plain, */*
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.116 Safari/537.36
Content-Type: application/json;charset=UTF-8
Referer: http://localhost:3000/library/book/2/character/6
Accept-Encoding: gzip, deflate, sdch
Accept-Language: en-AU,en;q=0.8,ru;q=0.6
{"bookId":1,"name":"Bob"}
Моя модель просмотра:
public class UpdateCharacterViewModel
{
public string Name { get; set; }
}
И, наконец, действие веб-API:
[Route("~/api/[controller]/{characterId}")]
[HttpPatch]
public IActionResult Update(int characterId, [FromBody]UpdateCharacterViewModel viewModel, [FromBody]JsonPatchDocument<UpdateCharacterViewModel> patch)
{
// viewModel is bound correctly but patch is NULL
// ...
}
Я обнаружил, что patch
отображается как NULL
, что указывает на проблему с привязкой. Чтобы убедиться, что с запросом не возникло проблем, я добавил viewModel
и обнаружил, что он правильно связывается — для действия доступен заполненный UpdateCharacterViewModel
.
Что я здесь делаю неправильно?