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);           
}