XAML - PostAsync 将空数据发送到数据库
XAML - PostAsync sending null data to database
我一直在努力掌握 C#/.NET 和 UWP 应用程序。目前我正在尝试按照 this guide 完成对我的数据库的 CRUD 操作。到目前为止一切顺利,但是当我来到我想要创建的部分时,我 运行 遇到了一些麻烦。下面的代码是我创建一个新对象并尝试 post 到数据库的地方。本文中的 Piece 是一本书。
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()
是 "an ambiguous reference" 并且我需要指定它是否属于 System.Net.Http;
或 Windows.Web.Http;
。如果我选择 System.Net.Http
那么它会告诉我 PostAsync()
中的参数 1 “ 无法从 'System.Uri' 转换为 'string'”,并且参数 2“无法从 'Windows.Web.Http.HttpFormUrlEncodedContent' 转换为 'System.Net.Http.HttpContent'”
如果我尝试让 HttpClient()
使用 Windows.Web.Http;
那么它在编译时不会给我任何错误,但是在创建对象并 posted 之后它显示为 null 在我的表中。
System.Net.Http
名字 space 有 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);
}
我一直在努力掌握 C#/.NET 和 UWP 应用程序。目前我正在尝试按照 this guide 完成对我的数据库的 CRUD 操作。到目前为止一切顺利,但是当我来到我想要创建的部分时,我 运行 遇到了一些麻烦。下面的代码是我创建一个新对象并尝试 post 到数据库的地方。本文中的 Piece 是一本书。
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()
是 "an ambiguous reference" 并且我需要指定它是否属于 System.Net.Http;
或 Windows.Web.Http;
。如果我选择 System.Net.Http
那么它会告诉我 PostAsync()
中的参数 1 “ 无法从 'System.Uri' 转换为 'string'”,并且参数 2“无法从 'Windows.Web.Http.HttpFormUrlEncodedContent' 转换为 'System.Net.Http.HttpContent'”
如果我尝试让 HttpClient()
使用 Windows.Web.Http;
那么它在编译时不会给我任何错误,但是在创建对象并 posted 之后它显示为 null 在我的表中。
System.Net.Http
名字 space 有 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);
}