Kurz gesagt, ich muss ein Array byte[]
als Körper Wert senden. Das Problem ist, dass [FromBody]
immer Null ist. Alle Lösungen, die ich bisher gesehen habe, beinhalten, dass der übergebene Wert auf die eine oder andere Weise an eine Zeichenkette geht. Dies ist in Ordnung, wenn der ursprüngliche Inhalt, der übergeben wird, einfacher Text ist (ASCII), aber in Fällen, in denen ich zum Beispiel ein JPG sende, funktioniert das nicht.Verwendung von WebClient zu POST zu WebAPI mit [FromBody]
Es ist extrem wichtig, zu erkennen und zu wissen, dass ich HTTPClient nicht verwenden kann, wie es aus irgendeinem Grund in irgendeiner Form hinzufügt, bricht die Lösung an allen möglichen Orten. Ich stecke mit dem WebClient fest. Hier
ist der Code Ich habe unter:
Berufung Seite:
Private Function UploadFile(targetURL As String, fileAttachment As Byte()) As String
Dim retVal As String = String.Empty
Using client = New WebClient()
Try
Dim request As HttpWebRequest = DirectCast(WebRequest.Create(targetURL), HttpWebRequest)
request.Method = "POST"
request.ContentType = "application/x-www-form-urlencoded"
request.ContentLength = fileAttachment.Length
Dim requestStream As Stream = request.GetRequestStream()
requestStream.Write(fileAttachment, 0, fileAttachment.Length)
Dim response As WebResponse = request.GetResponse()
Dim respStream As Stream = response.GetResponseStream()
Dim reader As New StreamReader(respStream)
retVal = reader.ReadToEnd()
respStream.Dispose()
reader.Dispose()
Catch ex As WebException
If ex.Status = WebExceptionStatus.ProtocolError Then
Dim wbrsp As HttpWebResponse = CType(ex.Response, HttpWebResponse)
Throw New HttpException(CInt(wbrsp.StatusCode), wbrsp.StatusDescription)
Else
Throw New HttpException(500, ex.Message)
End If
End Try
End Using
Return retVal
End Function
WebAPI Methode:
[Route("Upload/{appName}/{appKey}/{fileName}/{fileExt}")]
public async Task<string> Post(string appName, string appKey, string fileName, string fileExt, [FromBody] byte[] values) {
//snip as rest is not needed since values is always null
Was für eine vernünftige Lösung wäre, so dass die Byte-Array wird nicht konvertiert zu einer Zeichenkette (die die Werte "korrumpiert")?
Warum machen Sie nicht den Param-Typ "Wert" zu streamen und später in Byte in der API zu konvertieren? – TusharJ
Das Problem damit war, weil FromBody Param immer Null war, erhält es aus dem Request-Objekt eine Zeichenfolge zurück und dies verursacht Probleme mit dem Byte-Array, wenn die Quelle kein einfacher Text (wie ein JPG) ist. Auf jeden Fall habe ich es herausgefunden und eine Antwortantwort geschrieben. – MetalPhoenix