尝试构建一些简单的http Azure功能。可以从包含JSON主体的Web应用程序中获取POST,并将其另存为CosmosDB(DocumentDB)中的文档。另一个发送带有参数的GET请求,该参数从数据库中读取该文档并将其作为JSON返回。
我的DocumentDB集合全部设置好并准备就绪。
我发现每个接近的例子都会有一些细微的差别,比如输出到队列,所以这个例子不是我需要的。
答案 0 :(得分:2)
尝试构建一些简单的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;}
}
另一个发送带有参数的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;}
}
答案 1 :(得分:0)
你在问你应该如何归还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格式。