#c# #authentication #post #hash #httpclient
Вопрос:
Я использую следующий код для извлечения записей с камеры Dahua XVR, и он успешно возвращает записи.
var domain = "http://IP"; var credCache = new CredentialCache(); credCache.Add(new Uri(domain), "Digest", new NetworkCredential(username, password)); var httpClient = new HttpClient(new HttpClientHandler { Credentials = credCache }); var result= await httpClient.GetStringAsync(new Uri(URL));
но когда я публикую записи, используя следующий код, он не работает и приводит к неправильному запросу.
string url = "http://IP/cgi-bin/faceRecognitionServer.cgi"; var postData = new Listlt;KeyValuePairlt;string, stringgt;gt;() { new KeyValuePairlt;string, stringgt;( "action", "addPerson"), new KeyValuePairlt;string, stringgt;("groupID", "1"), new KeyValuePairlt;string, stringgt;("name", "Test Name"), new KeyValuePairlt;string, stringgt;("birthday", "1980-01-05"), new KeyValuePairlt;string, stringgt;("sex", "Male"), new KeyValuePairlt;string, stringgt;("country", "Pakistan"), new KeyValuePairlt;string, stringgt;("province", "KPK"), new KeyValuePairlt;string, stringgt;("city", "Peshawar") }; var content = new FormUrlEncodedContent(postData); var domain = "http://IP"; var credCache = new CredentialCache(); credCache.Add(new Uri(domain), "Digest", new NetworkCredential(username, password)); var httpClient = new HttpClient(new HttpClientHandler { Credentials = credCache }); var result = await httpClient.PostAsync(new Uri(url), content);
приведенный выше код всегда возвращает 400 неверных запросов. может ли кто-нибудь помочь?
Комментарии:
1. Prbolem, вероятно, связан с url-адресом
Ответ №1:
Я исправил проблему, как показано ниже. Может быть, это кому-то поможет.
- уменьшен размер изображения, которое я должен был вставить в тело запроса.
- объединил URL-адрес и параметры в одну строку.
string url = "http://IP/cgi-bin/faceRecognitionServer.cgi? action=addPersonamp;groupID=1amp;name=TestNameamp;sex=Male"; string domain = "http://IP"; CredentialCache credCache = new CredentialCache { { new Uri(domain), "Digest", new NetworkCredential(username, password) } }; using HttpClient client = new HttpClient(new HttpClientHandler { Credentials = credCache }); using FileStream stream = File.OpenRead(AppContext.BaseDirectory. Replace("\bin\Debug\netcoreapp3.1", "") "Files\14.jpg"); var file_content = new ByteArrayContent(new StreamContent(stream).ReadAsByteArrayAsync().Result); file_content.Headers.ContentType = new MediaTypeHeaderValue("image/jpeg"); var response = await client.PostAsync(url, file_content);