Я пытаюсь отправить запрос AJAX PATCH методу Web API, и исправленный объект распознается Marvin.JsonPatch .
Пока все, что я отправилсервер привел к получению пустого запроса.
Метод контроллера Web API выглядит следующим образом:
public async Task<IHttpActionResult> Update(long orderId, JsonPatchDocument<Order> patchedOrder)
Я отправляю сообщение, используя HttpClient
, как это (не могуиспользуйте async
в этом приложении) ...
var patchDoc = new JsonPatchDocument<Order>();
patchDoc.Replace(e => e.Price, newPrice);
patchDoc.Replace(e => e.WordCount, newWordCount);
var request = new HttpRequestMessage(new HttpMethod("PATCH"), uri)
{
Content = new StringContent(JsonConvert.SerializeObject(patchDoc),
System.Text.Encoding.Unicode,
"application/json")
};
HttpResponseMessage response;
using (var client = new HttpClient(...))
{
response = client.SendAsync(request).GetAwaiter().GetResult();
}
Но когда это контроллер, аргумент patchedOrder
равен null
.
При отладке на контроллере I 'Мы также пытались
var s = await Request.Content.ReadAsStringAsync();
Но это возвращает пустую строку - кто-нибудь может объяснить, почему?
ОБНОВЛЕНИЕ:
Так выглядит содержимое документа JsonPatch при передаче в HttpClient ...
{
"Operations": [{
"OperationType": 2,
"value": 138.7,
"path": "/price",
"op": "replace"
},
{
"OperationType": 2,
"value": 1320,
"path": "/wordcount",
"op": "replace"
}],
"ContractResolver": {
"DynamicCodeGeneration": true,
"DefaultMembersSearchFlags": 20,
"SerializeCompilerGeneratedMembers": false,
"IgnoreSerializableInterface": false,
"IgnoreSerializableAttribute": true,
"NamingStrategy": null
},
"CaseTransformType": 0
}