C# 使用c中的Firebase按键获取元素#

C# 使用c中的Firebase按键获取元素#,c#,firebase,firebase-realtime-database,C#,Firebase,Firebase Realtime Database,我遇到了一个问题,我的firebase数据库中有一个guid样式的模式,我想显示一个DisplayText文本,但由于某种原因,我的代码无法工作。我正在使用FirebaseDatabase.Net包装器。如何映射它,以便使用guid方式模式正确地从数据库中读取?谢谢你的帮助 代码: private异步任务ShowQuestion() { var firebase=new FirebaseClient(“https://PROJECT_URL.firebaseio.com/"); var dino

我遇到了一个问题,我的firebase数据库中有一个guid样式的模式,我想显示一个
DisplayText
文本,但由于某种原因,我的代码无法工作。我正在使用FirebaseDatabase.Net包装器。如何映射它,以便使用guid方式模式正确地从数据库中读取?谢谢你的帮助

代码:

private异步任务ShowQuestion()
{
var firebase=new
FirebaseClient(“https://PROJECT_URL.firebaseio.com/");
var dinos=等待火力基地
.儿童(“问题”)
.OrderByKey()
.StartAt(“显示文本”)
.LimitToFirst(1)
.OnceAsync();
foreach(以恐龙为单位的var恐龙)
{
控制台写入线(dinos);
} 
我试着做:

   string page = "https://PROJECT_URL.firebaseio.com/Questions/DisplayText.json?orderBy"DisplayText"&limitToFirst=1";
        using (HttpClient client = new HttpClient())
        using (HttpResponseMessage response = await client.GetAsync(page))
        using (HttpContent content = response.Content)
        {
            // Reading the string. 
            string result = await content.ReadAsStringAsync();
            Console.WriteLine(result);

            // Getting a reference to the text component.
            questionDisplayText = GetComponent<Text>();
            questionDisplayText.text = result.ToString();
            questionDisplayText.text = result.Trim(new char[] {'"'});
        } 
字符串页=”https://PROJECT_URL.firebaseio.com/Questions/DisplayText.json?orderBy“DisplayText”&limitToFirst=1”;
使用(HttpClient=new HttpClient())
使用(httpresponsemessageresponse=wait client.GetAsync(第页))
使用(HttpContent=response.content)
{
//读字符串。
字符串结果=等待内容。ReadAsStringAsync();
控制台写入线(结果);
//获取对文本组件的引用。
questionDisplayText=GetComponent();
questionDisplayText.text=result.ToString();
questionDisplayText.text=result.Trim(新字符[]{'''});
} 

Firebase查询采用两步方法:

  • 可以根据子节点的键、值或属性值对其排序
  • 然后根据订购的物品的值进行筛选
  • 由于您是按键排序的,因此像
    StartAt()
    这样的过滤操作会将键与您传递的值进行比较。由于没有键
    DisplayText
    ,因此没有结果

    如果你想阅读第一个问题,你不应该使用
    startAt()

    如果您希望返回按其
    DisplayText
    属性值排序的结果,则如下所示:

    FirebaseClient("https://PROJECT_URL.firebaseio.com/");
    var dinos = await firebase
          .Child("Questions")
          .OrderByChild("DisplayText")
          .LimitToFirst(1)
    

    由于您表示要使用REST API,下面是一个如何使用REST API的示例:

    https://stackoverflow.firebaseio.com/59384124.json?orderBy="DisplayText"&startAt="How"
    
    如果要在代码中嵌入此字符串,您有几个选项。主要选项包括:

    string page = "https://PROJECT_URL.firebaseio.com/Questions/DisplayText.json?orderBy=\"DisplayText\"&startAt=\"How\"&limitToFirst=1";
    

    别忘了:为了能够在服务器上进行筛选,您需要在安全规则中定义一个索引。在我的例子中,我是这样做的:

    "59384124": { ".indexOn": "DisplayText" },
    
    另见:

    • 文件
    • 这篇博文发表在

    JSON数据本质上是无序的,因此无法按顺序检索子项。除此之外:
    https://PROJECT_URL.firebaseio.com/Questions/bd341******/json?orderBy“DisplayText“&limitToFirst=1
    另请参见hey@Frank,你能给我看一个关于http web请求的第二个解决方案的示例吗?我在中显示了URL。如果你在这方面遇到困难,请显示你对我提供的信息做了什么。请查看带有屏幕截图的“我尝试过做”部分的更新问题。如果你使用
    要终止整个字符串,您不能在该字符串中使用相同的符号来包装
    DisplayText
    字段名。大多数编程语言允许您使用
    ,这样您就可以在整个字符串中使用
    。除此之外,我的第一条评论中似乎遗漏了一个
    =
    。所以
    ”https://PROJECT_URL.firebaseio.com/Questions/bd341******/json?orderBy“DisplayText”&limitToFirst=1'
    "https://PROJECT_URL.firebaseio.com/Questions/bd341******/在这种情况下,DisplayText.json?orderBy='DisplayText'&limitToFirst=1“
    string page = "https://PROJECT_URL.firebaseio.com/Questions/DisplayText.json?orderBy=\"DisplayText\"&startAt=\"How\"&limitToFirst=1";
    
    string page = @"https://PROJECT_URL.firebaseio.com/Questions/DisplayText.json?orderBy=""DisplayText""&startAt=""How""&limitToFirst=1";
    
    "59384124": { ".indexOn": "DisplayText" },