我一直在努力掌握C#/ .NET和UWP应用程序。目前我正在尝试按照this guide对我的数据库完成CRUD操作。到目前为止一切都那么好,但是当我来到我想创造的部分时,我遇到了麻烦。下面的代码是我创建一个新对象并尝试将其发布到数据库的地方。在这方面的作品是一本书。
var newPiece = new Piece
{
PieceTitle = Title.Text,
PieceAuthor = Author.Text,
PieceIsbn = Isbn.Text,
PieceDescription = Description.Text
};
using (var client = new HttpClient())
{
var content = JsonConvert.SerializeObject(newPiece);
Task task = Task.Run(async () =>
{
var data = new HttpFormUrlEncodedContent(
new Dictionary<string, string>
{
["value"] = content
});
await client.PostAsync(App.BaseUri, data);
});
task.Wait();
}
这里的问题是,因为我同时使用HttpClient()
和HttpFormUrlEncodedContent()
VS告诉我HttpClient()
是“含糊不清的引用”,我需要指明它是否属于System.Net.Http;
或Windows.Web.Http;
。如果我选择System.Net.Http
,那么它会告诉我PostAsync()
“中的参数1无法从'System.Uri'转换为'string'”,并且该参数2“< em>无法从'Windows.Web.Http.HttpFormUrlEncodedContent'转换为'System.Net.Http.HttpContent'“
如果我尝试让HttpClient()
使用Windows.Web.Http;
,那么它在编译时不会给我任何错误,但是在创建并发布对象后,它显示为 null 在我的桌子里。
答案 0 :(得分:1)
System.Net.Http
名称空间为FormUrlEncodedContent
。你可以使用它。
var newPiece = new Piece
{
PieceTitle = Title.Text,
PieceAuthor = Author.Text,
PieceIsbn = Isbn.Text,
PieceDescription = Description.Text
};
using (var client = new System.Net.Http.HttpClient()) {
var json = JsonConvert.SerializeObject(newPiece);
var content = new System.Net.Http.FormUrlEncodedContent(
new Dictionary<string, string> {
["value"] = json
});
await client.PostAsync(App.BaseUri, content);
}
还应尽量避免混合异步和阻止.Wait()
或.Result
之类的调用,因为它们可能会导致死锁。
还表明收到的数据为空。这可能表示所使用的格式与预期格式不匹配。
尝试使用其他格式。例如,以下内容发送JSON内容。
using (var client = new System.Net.Http.HttpClient()) {
var json = JsonConvert.SerializeObject(newPiece);
var content = new System.Net.Http.StringContent(json, Encoding.UTF8, "application/json");
await client.PostAsync(App.BaseUri, content);
}