Tôi đang sử dụng ngăn xếp WCF WebApi (Xem trước 4) qua NuGet (phiên bản pkg 0.3.0) và dường như không thể tìm ra cách "POST POCO" bằng cách sử dụng HttpClient
.Cách POST một POCO với HttpFient của WCF WebApi
Do sau:
Public Class MyInfo
Public Property MyDate As DateTime
Public Property MyId As Guid
End Class
...
Dim value = New MyInfo With {.MyDate = Today, .MyId = Guid.NewGuid()}
Using client as New HttpClient(baseUri)
Using response = client.Post(requestUri, New ObjectContent(Of MyInfo)(value))
' Do stuff
End Using
End Using
...
Khi phương pháp Post
được gọi, tôi nhận được ngoại lệ sau đây:
The 'XmlSerializer' serializer cannot serialize the type 'MyInfo'.
at Microsoft.ApplicationServer.Http.XmlMediaTypeFormatter.GetSerializerForType(Type type)
at Microsoft.ApplicationServer.Http.XmlMediaTypeFormatter.OnWriteToStream(Type type, Object value, Stream stream, HttpContentHeaders contentHeaders, TransportContext context)
at Microsoft.ApplicationServer.Http.MediaTypeFormatter.WriteToStream(Type type, Object instance, Stream stream, HttpContentHeaders contentHeaders, TransportContext context)
at Microsoft.ApplicationServer.Http.ObjectContent.WriteToStreamInternal(Stream stream, TransportContext context)
at Microsoft.ApplicationServer.Http.ObjectContent.SerializeToStream(Stream stream, TransportContext context)
at System.Net.Http.HttpContent.LoadIntoBuffer(Int32 maxBufferSize)
at System.Net.Http.HttpClientChannel.PrepareWebRequestForContentUpload(HttpWebRequest webRequest, HttpRequestMessage request)
at System.Net.Http.HttpClientChannel.CreateAndPrepareWebRequest(HttpRequestMessage request)
at System.Net.Http.HttpClientChannel.Send(HttpRequestMessage request, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.Send(HttpRequestMessage request, HttpCompletionOption completionOption, CancellationToken cancellationToken)
at System.Net.Http.HttpClient.Send(HttpRequestMessage request)
at System.Net.Http.HttpClient.Post(Uri requestUri, HttpContent content)
at System.Net.Http.HttpClient.Post(String requestUri, HttpContent content)
...
này đang sử dụng gói NuGet 0.3.0.
Tôi đã thử thêm <Serializable()>
và thậm chí <DataContract()>
đến MyInfo
, nhưng điều đó không giúp ích gì. Tôi chỉ làm điều gì đó sai?
Tôi đã tìm thấy this post tại đây trên StackOverflow nơi có vẻ như ai đó đang làm điều gì đó tương tự như những gì tôi đã làm ở trên. Tôi thậm chí đã sao chép công việc của anh ấy (đoán rằng đối tượng Machine
của anh ta là một POCO đơn giản như là MyInfo
của tôi) và chạy vào cùng một ngoại lệ "không thể tuần tự hóa".
Thay vì mã hóa cứng trong "văn bản/xml", tôi đã sử dụng XmlMediaTypeFormatter.DefaultMediaType.MediaType (là "application/xml" - một loại phương tiện "tốt hơn" dù sao đi nữa). Vẫn muốn biết nếu tôi có thể tránh làm điều này và chỉ rơi trở lại trên một số mặc định lành mạnh. – ckittel