首页 文章

Azure http函数和DocumentDB

提问于
浏览
2

尝试构建一些简单的http Azure功能 . 可以从包含JSON主体的Web应用程序中获取POST,并将其另存为CosmosDB(DocumentDB)中的文档 . 另一个发送带有参数的GET请求,该参数从数据库中读取该文档并将其作为JSON返回 .

我有我的DocumentDB集合所有设置和准备 .

我发现每个接近的例子总是有一些细微的差别,比如输出到队列,所以这个例子不是我需要的 .

2 回答

  • 0

    尝试构建几个简单的http Azure功能 . 可以从包含JSON主体的Web应用程序中获取POST,并将其另存为CosmosDB(DocumentDB)中的文档 .

    要从HttpTrigger Azure功能应用程序在Cosmos DB中存储数据,您可以参考以下示例代码,该代码可以正常使用 .

    using System.Net;
    
    public static HttpResponseMessage Run(HttpRequestMessage req, out object taskDocument, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");
    
        MyData md=req.Content.ReadAsAsync<MyData>().Result;
        taskDocument  = new {
            name = md.name,
            task = md.task,
            duedate = md.duedate
        };
    
    
       if (name != "") {
            return req.CreateResponse(HttpStatusCode.OK);
        }
        else {
            return req.CreateResponse(HttpStatusCode.BadRequest);
        }
    }
    
    public class MyData{
        public string name { get; set;}
        public string task { get; set;}
        public string duedate { get; set;}
    }
    

    enter image description here

    enter image description here

    另一个发送带有参数的GET请求,该参数从数据库中读取该文档并将其作为JSON返回 .

    要从Cosmos DB检索数据并通过Azure功能应用程序将其作为JSON返回,请参阅以下示例 .

    function.json

    {
      "bindings": [
        {
          "authLevel": "function",
          "name": "req",
          "type": "httpTrigger",
          "direction": "in",
          "route": "documents/{name}"
        },
        {
          "name": "$return",
          "type": "http",
          "direction": "out"
        },
        {
          "type": "documentDB",
          "name": "inputDocument",
          "databaseName": "xxxdocumentdbtest",
          "collectionName": "testcoll",
          "sqlQuery": "SELECT * FROM c where c.name = {name}",
          "connection": "xxxx_DOCUMENTDB",
          "direction": "in"
        }
      ],
      "disabled": false
    }
    

    run.csx

    #r "Newtonsoft.Json"
    using System.Net;
    using Newtonsoft.Json;
    
    public static HttpResponseMessage Run(HttpRequestMessage req, IEnumerable<MyData> inputDocument, TraceWriter log)
    {
        log.Info("C# HTTP trigger function processed a request.");
    
        MyData md = inputDocument.FirstOrDefault();
    
        log.Info(md.task);
    
        var val = JsonConvert.SerializeObject(md);
    
        return req.CreateResponse(HttpStatusCode.OK, val);
    }
    
    public class MyData{
        public string name { get; set;}
        public string task { get; set;}
        public string duedate { get; set;}
    }
    

    enter image description here

  • 2

    你在问你应该如何归还JSON吗?

    这是我的一个Azure功能的内容 . 首先,我尝试检索我想要的数据( GetVotes() ) . 之后,我将此数据更改为我想要返回到客户端的格式( CreateResponse() ),并在将其序列化为JSON时返回到客户端 .

    [FunctionName("Status")]
        public static async Task<HttpResponseMessage> Run([HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)]HttpRequestMessage req, TraceWriter logWriter)
        {
            Status.log = logWriter;
            Status.log.Info("C# HTTP trigger function processed a request.");
    
            var votes = await GetVotes();
            var response = CreateResponse(votes);
    
            return req.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(response));
        }
    
        private static List<ViewModel.Vote> CreateResponse(IEnumerable<Entities.Vote> votes)
        {
            var voteCount = new Dictionary<string, int>();
            foreach (var vote in votes)
            {
                Status.log.Info($"Found language `{vote.Language}`.");
                if (voteCount.ContainsKey(vote.Language))
                {
                    voteCount[vote.Language]++;
                }
                else
                {
                    voteCount.Add(vote.Language, 1);
                }
            }
    
            var result = new List<ViewModel.Vote>();
            foreach (var languageVotes in voteCount)
            {
                result.Add(new ViewModel.Vote(languageVotes.Key, languageVotes.Value));
            }
            return result;
        }
    

    当然,如果对象可以序列化为JSON,则可以使用任何类型的对象执行此操作 .

    这个片段的重要部分是 JsonConvert.SerializeObject(response) ,它实际序列化为JSON格式 .

相关问题