如何从 Azure 移动应用服务调用 HTTP(Azure Functions)?
How to call HTTP(Azure Functions) from Azure Mobile app Services?
我创建了简单的 azure 函数 (Http+C#) return 简单 test.I 想要 return 从 azure 函数响应到 azure 移动设备 services.Before 我有从我的手机 services.now 调用存储过程 我正在尝试调用该 azure 函数(节点 Js)想要从 azure 函数取回响应。 Azure 移动服务代码和我下面的简单 azure 函数脚本
module.exports = {
"post": function (req, res, next) {
console.log("Started Application Running");
var http = require("http");
var options = {
host: "< appname >.azurewebsites.net",
path: "api/<functionname>?code=<APIkey>",
method: "POST",
headers : {
"Content-Type":"application/json",
"Content-Length": { name : "Testing application"}
}
};
http.request(options, function(response) {
var str = "";
response.on("data", function (chunk) {
str += chunk;
res.json(response);
console.log("Something Happens");
});
response.on("end", function () {
console.log(str);
res.json(response);
});
});
console.log("*** Sending name and address in body ***");
}
};
这是我的 azure 函数
using System.Net;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// parse query parameter
//string name = req.GetQueryNameValuePairs()
// .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
//.Value;
string name = "divya";
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
// Set name to query string or body data
name = name ?? data?.name;
return name == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello Welcome ");
}
.谁能帮帮我?
您应该使用 req.write(data)
发送您的请求正文,而不是 Content-Length
。有关如何执行此操作的示例,请参阅 this answer。
您的代码应如下所示:
module.exports = {
"post": function (req, res, next) {
var http = require("http");
var post_data = JSON.stringify({ "name" : "Testing application"});
var options = {
host: "<appname>.azurewebsites.net",
path: "/api/<functionname>?code=<APIkey>", // don't forget to add '/' before path string
method: "POST",
headers : {
"Content-Type":"application/json",
"Content-Length": Buffer.byteLength(post_data)
}
};
var requset = http.request(options, function(response) {
var str = "";
response.on("data", function (chunk) {
str += chunk;
});
response.on("end", function () {
res.json(str);
});
});
requset.write(post_data);
requset.end();
requset.on('error', function(e) {
console.error(e);
});
}
};
我创建了简单的 azure 函数 (Http+C#) return 简单 test.I 想要 return 从 azure 函数响应到 azure 移动设备 services.Before 我有从我的手机 services.now 调用存储过程 我正在尝试调用该 azure 函数(节点 Js)想要从 azure 函数取回响应。 Azure 移动服务代码和我下面的简单 azure 函数脚本
module.exports = {
"post": function (req, res, next) {
console.log("Started Application Running");
var http = require("http");
var options = {
host: "< appname >.azurewebsites.net",
path: "api/<functionname>?code=<APIkey>",
method: "POST",
headers : {
"Content-Type":"application/json",
"Content-Length": { name : "Testing application"}
}
};
http.request(options, function(response) {
var str = "";
response.on("data", function (chunk) {
str += chunk;
res.json(response);
console.log("Something Happens");
});
response.on("end", function () {
console.log(str);
res.json(response);
});
});
console.log("*** Sending name and address in body ***");
}
};
这是我的 azure 函数
using System.Net;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
log.Info("C# HTTP trigger function processed a request.");
// parse query parameter
//string name = req.GetQueryNameValuePairs()
// .FirstOrDefault(q => string.Compare(q.Key, "name", true) == 0)
//.Value;
string name = "divya";
// Get request body
dynamic data = await req.Content.ReadAsAsync<object>();
// Set name to query string or body data
name = name ?? data?.name;
return name == null
? req.CreateResponse(HttpStatusCode.BadRequest, "Please pass a name on the query string or in the request body")
: req.CreateResponse(HttpStatusCode.OK, "Hello Welcome ");
}
.谁能帮帮我?
您应该使用 req.write(data)
发送您的请求正文,而不是 Content-Length
。有关如何执行此操作的示例,请参阅 this answer。
您的代码应如下所示:
module.exports = {
"post": function (req, res, next) {
var http = require("http");
var post_data = JSON.stringify({ "name" : "Testing application"});
var options = {
host: "<appname>.azurewebsites.net",
path: "/api/<functionname>?code=<APIkey>", // don't forget to add '/' before path string
method: "POST",
headers : {
"Content-Type":"application/json",
"Content-Length": Buffer.byteLength(post_data)
}
};
var requset = http.request(options, function(response) {
var str = "";
response.on("data", function (chunk) {
str += chunk;
});
response.on("end", function () {
res.json(str);
});
});
requset.write(post_data);
requset.end();
requset.on('error', function(e) {
console.error(e);
});
}
};