使用Flurl发送POST请求JSON数据

6

我开始使用Flurl,想要创建一个POST请求,但是我认为我的JSON参数格式有问题。

以下是JSON参数:

{
    "aaaUser" : {
    "attributes" : {
        "name" : "device:domain\\login",
        "pwd" : "123456"
        }
    }
}

这些设置适用于Postman,现在我想使用Flurl继续我的小POST :) 但是我的JSON格式不正确。

using System.Threading.Tasks;
using Flurl.Http;

namespace Script
{
    class Program
    {
        static async Task Main(string[] args)
        {
            var result = await "https://IP/api/aaaLogin.json".PostUrlEncodedAsync(new
            {
                name = "device:domain\\login",
                pwd = "123456"
            });
        }
    }
}

感谢您的帮助!

你的实际代码没有发布JSON。这不是UrlEncodedAsync的用途。UrlEncodedAsync用于像HTML表单一样进行POST。请阅读文档。它清楚地展示了如何使用PostJsonAsync。 - mason
@mason 是的,现在我可以使用PostJsonAsync了。然而,JSON格式的问题始终存在。因为我需要建立第一个连接。 - Digitag
你说需要建立第一次连接是什么意思?你具体遇到了什么错误?请花些时间考虑其他人如何看待你的问题。记住,我们不在你的电脑旁边,无法看到你正在做什么。你需要以一种我们能够理解的方式向我们正确传达信息。 - mason
你在使用哪个API?它有文档吗? - Todd Menier
是的,确切地说,但我无法在此脚本中正确放置JSON。 - Digitag
显示剩余3条评论
1个回答

10

我认为这里已经确定了两个问题。

  1. 您正在使用 PostUrlEncodedAsync,它将以 URL 编码格式发送数据,例如:name=device:domain\\login&pwd=123456。如果您想要将数据序列化为 JSON,请改用 PostJsonAsync

  2. 您只包括了 JSON 的嵌套 attributes 对象,而没有包括整个对象。

简而言之,您需要像这样:

var result = await "https://IP/api/aaaLogin.json".PostJsonAsync(new
{
    aaaUser = new
    {
        attributes = new
        {
            name = "device:domain\\login",
            pwd = "123456"
        }
    }
});

当你完成到这一步,你需要知道如何处理结果。如果响应是JSON格式的,您可能希望在上述调用中附加.ReceiveJson().ReceiveJson<T>()以获得更友好的对象来操作。请参阅文档


非常感谢您的回答。它非常清晰,我的问题已经解决了。 我将深入学习Flurl :) - Digitag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接