在 Unity 中向 Notion API 发出 POST 请求

Posted

技术标签:

【中文标题】在 Unity 中向 Notion API 发出 POST 请求【英文标题】:making POST request to Notion API in Unity 【发布时间】:2021-09-05 12:23:43 【问题描述】:

我正在尝试。我有一个类,其中包含我根据 Notion 要求创建的所有属性。

    [Serializable]
    public class Parent
    
        public string Database_id  get; set; 
        public Parent(string database_id)
        
            Database_id = database_id;
        
    

    [Serializable]
    public class Text
    
        public string Content  get; set; 

        public Text(string content)
        
            Content = content;
        
        //public List<RichText> rich_text  get; set; 
    

    [Serializable]
    public class Title
    
        public Text Text  get; set; 
        public Title(Text text)
        
            Text = text;
        
    

    [Serializable]
    public class Name
    
        public List<Title> title  get; set; 
        public Name(List<Title> titles)
        
            title = titles;
        
    

    [Serializable]
    public class Properties
    
        public Name Name  get; set; 

        public Properties(Name name)
        
            Name = name;
        
    

    [Serializable]
    public class Root
    
        public Parent Parent  get; set; 
        public Properties Properties  get; set; 

        public Root(Parent parent, Properties properties)
        
            parent = parent;
            properties = properties;
        
    

这就是我调用它的方式,我尝试将 json 字符串转换为字节,但我收到错误消息,它是错误的 json 格式,我现在的方式取得了一些进展,但说 parent 是未定义的。

var url = $"https://api.notion.com/v1/pages";
        var parent = new Parent(databaseId);
        var txt = new Text("test");
        var title = new Title(txt);
        var nam = new Name(new List<Title>()  title );
        var prop = new Properties(nam);
        var root = new Root(parent, prop);


        string json = JsonUtility.ToJson(root);

        UnityWebRequest www = new UnityWebRequest(url, "POST");
        byte[] bodyRaw = Encoding.UTF8.GetBytes(json);
        www.uploadHandler = (UploadHandler)new UploadHandlerRaw(bodyRaw);
        www.downloadHandler = (DownloadHandler)new DownloadHandlerBuffer();

        www.SetRequestHeader("Authorization", userSecret);
        www.SetRequestHeader("notion_version", Static.NOTION_VER);
        www.SetRequestHeader("Content-Type", "application/json");

        yield return www.SendWebRequest();

这就是我得到的错误,它不是很有帮助。

如有任何帮助,我们将不胜感激。

编辑: 我已删除 get;放;像 derHugo 建议的那样,但是我还需要用小写字母制作一些字段,例如。 Database_id 到 database_id。

【问题讨论】:

您是否尝试过查看root 对象的形状,也许它的构造方式有问题?直接操作 JSON 可能更容易。 因为它是统一的,我不能使用 Newtonsoft.Json,(否则这将是非常简单的任务)所以我尝试在字符串 string data = "\"parent\ ": \"database_id\": \"833d2ab361a74885a639749df796f84e\",\"properties\": \"Name\": \"title\": [\"text\": \"content\" : \"test1\"]";但它根本不起作用并说无效的json 【参考方案1】:

Unity 序列化器不支持属性

请参阅 (Script Serialzation)。

只需删除所有get; set; ,这样您将拥有字段

,而不是属性
[Serializable]
public class Parent

    public string Database_id;

    public Parent(string database_id)
    
        Database_id = database_id;
    


[Serializable]
public class Text

    public string Content;

    public Text(string content)
    
        Content = content;
    


[Serializable]
public class Title

    public Text Text;

    public Title(Text text)
    
        Text = text;
    


[Serializable]
public class Name

    public List<Title> title;

    public Name(List<Title> titles)
    
        title = titles;
    


[Serializable]
public class Properties

    public Name Name;

    public Properties(Name name)
    
        Name = name;
    


[Serializable]
public class Root

    public Parent Parent;
    public Properties Properties;

    public Root(Parent parent, Properties properties)
    
        parent = parent;
        properties = properties;
    


因为是unity所以不能用Newtonsoft.Json,(不然会很简单)

当然你可以

它甚至是一个包:NewtonSoft JSON 你可以通过Package Manager 简单地安装

afaik 它甚至预装在最新的 Unity 版本中

【讨论】:

它有效,谢谢,完全忘记了这一点,但是我不得不对单词的大小写与预期的内容进行匹配,例如。父母而不是父母。 @MichaelKrezalek 当然是的 ;) 你没有发布你的 JSON,所以我们不得不假设情况已经如此;)

以上是关于在 Unity 中向 Notion API 发出 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章

如何在 React Native 中向 API 发出 POST 请求?

当您不知道页数时,如何使用 Node.js 在 while 循环中向 API 发出多个分页 GET 请求?

是否可以通过 Notion API 发送文档/页面/块邀请

Django 并在不同视图中向外部 API 发布请求

Notion API - 使用 Notion OAuth 或 API 令牌创建数据库

如何通过 Notion API 在数据库中插入数据?