如何从 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);
    });

  }
};