如何从 Azure 移动应用服务调用 HTTP(Azure Functions)?

Posted

技术标签:

【中文标题】如何从 Azure 移动应用服务调用 HTTP(Azure Functions)?【英文标题】:How to call HTTP(Azure Functions) from Azure Mobile app Services? 【发布时间】:2017-09-02 08:25:38 【问题描述】:

我创建了简单的 azure 函数 (Http+C#),它返回简单的测试。我想从 azure 函数返回响应到 azure 移动服务。在我从移动服务调用存储过程之前。现在我正在尝试调用它azure function(node 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 ***");        
    
;

这是我的天蓝色函数

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 ");

.谁能帮帮我?

【问题讨论】:

您目前遇到的具体问题是什么? 运行移动服务时出现内部服务器错误。我试图解决我不知道确切的解决方案。 【参考方案1】:

您应该使用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);
    );

  
; 

【讨论】:

我已经尝试过,但没有从我的移动服务 API 中获得价值。出现意外的连接失败错误。

以上是关于如何从 Azure 移动应用服务调用 HTTP(Azure Functions)?的主要内容,如果未能解决你的问题,请参考以下文章

Azure 移动服务从 FourSquare 收到 403 HTTP 异常

从 Azure Python HTTP 触发函数调用 Azure 逻辑应用

如何将自己的标头添加到Azure移动服务调用?

移动设备上的 Azure App Service 身份验证问题

Azure 移动服务中的随机 503 错误

如何从 Azure 数据工厂安全地调用 Azure 逻辑应用