У меня есть приложение WinForms. Net 4.0, которое использует WebClient (поскольку, к сожалению, я не смог заставить его работать ни с HttpWebRequest, ни с HttpClient, из-за того, что оно находится в Net 4.0, а не в *. Net 4.5).
Использует веб-API. Он выполняет GET для API:
using System.Net;
using Newtonsoft.Json;
using (WebClient client = new WebClient())
{
ServicePointManager.SecurityProtocol = (SecurityProtocolType)(3072);
client.Headers.Add("someHeader", 123);
string res = client.DownloadString("http://someurl.com/api/someendpoint");
List<SomeObject> someObjects = JsonConvert.DeserializeObject<List<SomeObject>>(res);
}
Он также выполняет DELETE:
using System.Net;
using (WebClient client = new WebClient())
{
ServicePointManager.SecurityProtocol = (SecurityProtocolType)(3072);
client.Headers.Add("someHeader", 123);
client.UploadValues("http://someurl.com/api/someendpoint", "DELETE", new NameValueCollection());
}
Теперь мне нужно выполнить PATCH, но я совершенно не понимаю, как это сделать Это. Я искал inte rnet, и в большинстве примеров используется HttpClient или HttpWebRequest. Я не нашел ничего, что использует WebClient. Поэтому мне нужно отправить JSON примерно так:
{
"op": "replace",
"path": "filename",
"value": "somefile.pdf"
}
в виде запроса глагола PATCH к API. Я пробовал это:
using System.Net;
using Newtonsoft.Json;
string json = @"[{
""op"": ""replace"",
""path"": ""//filename"",
""value"": ""somefile.pdf""
}]";
var serializeModel = JsonConvert.SerializeObject(json);
using (WebClient client = new WebClient())
{
ServicePointManager.SecurityProtocol = (SecurityProtocolType)(3072);
client.Headers.Add("someHeader", 123);
var response = client.UploadString("http://someurl.com/api/someendpoint/123", "PATCH", serializeModel);
}
Но я получаю это исключение:
Удаленный сервер возвратил ошибку: (415) Неподдерживаемый тип носителя.
(И эта конечная точка Patch API работает хорошо, поскольку в настоящее время она используется веб-приложением Angular)
Любая помощь будет принята с благодарностью. Спасибо.