Nabend,
ich hänge gerade dabei, den WebClient Request zu einem HttpClient Request zu konvertieren.
Der WebClient Request sieht wie folgt aus und funktioniert auch:
string testImagePath = @"Path.png";
WebClient client = new();
client.UploadFileCompleted += Client_UploadFileCompleted;
client.Headers.Add("Content-Type", "binary/octet-stream");
Uri address = new("API Endpunkt");
client.UploadFileAsync(address, "POST", testImagePath);
Mein Versuch mit HttpClient sieht wie folgt aus:
string testImagePath = @"Path.png";
byte[] imageBytes = File.ReadAllBytes(testImagePath);
HttpClient httpClient = new();
httpClient.DefaultRequestHeaders.Clear();
httpClient.DefaultRequestHeaders.Accept.Add(new("*/*"));
ByteArrayContent byteArrayContent = new(imageBytes);
byteArrayContent.Headers.ContentType = new("binary/octet-stream");
var resp = await httpClient.PostAsync("API Endpunkt", byteArrayContent);
var content = await resp.Content.ReadAsStringAsync();
Habt Ihr eine bessere Idee, bzw. was mache ich falsch?
Grüße und schöne Weihnachten 😃
P.S.: Es handelt sich um einem Imagehoster. Die Variante mit dem WebClient liefert lediglich einen String mit der URL zu dem hochgeladenen Foto. Die Variante mit dem HttpClient liefer ebenfalls eine URL zurück, nur wenn ich diesen aufrufe, kommt ein leeres Bild vom Hoster. Quasi "Image not Found" Bild.
Gib doch den potentiellen Helfern ein wenig mehr Infos zur API.... Name? Docs?
WebClient setzt im Hintergrund sehr viel, was Dir alles im HttpClient fehlt.
Dafür setzt Du im HttpClient Accept-Header, die (hier) bei dem Post völlig egal sind.
Ohne Infos zur API kann man nur raten, was Du brauchst.
Ungewöhnlich ist auch die Verwendung von binary/octet-stream
.
Das wird normalerweise als Workaround für den Download von Dateien verwendet; nicht zum Upload.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Die Seite arbeitet mit Content-Type: multipart/form-data;
und nicht mit binary/octet-stream
.
Sieht man ganz einfach, wenn man im Browser die Developer Tools öffnet.
Auch im HTML Code ist Multipart deklariert.
enctype="multipart/form-data"
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Die Seite arbeitet mit
Content-Type: multipart/form-data;
und nicht mitbinary/octet-stream
.
Der WebClient Code Schnipsel kommt aus deren eigenem Uploader Tool.
Ich habe auch schon versucht mit dem HttpClient und dem MultipartFormDataContent den Request zu senden. Aber gleiches Ergebnis wie beschrieben.
Dann nimm Dir ein Tool wie Fiddler, und schau Dir, was Du tatsächlich an den Endpunkt schickst.
Hab mehrere Vermutungen, dass entweder gewisse Parameter nicht ankommen oder Du den falschen Endpunkt nimmst.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
PS: kurz gegoogelt. Die Webseite bietet sehr wohl eine API; wenn auch sehr rudimentär.
https://www.directupload.net/api/upload.php
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
PS: kurz gegoogelt. Die Webseite bietet sehr wohl eine API; wenn auch sehr rudimentär.
https://www.directupload.net/api/upload.php
Das habe ich auch nie verleugnet.
Nur das die keine Dokumentation dafür besitzen bzw. nicht öffentlich ist.