如何在本地调用另一个功能应用程序?

How to call one function app from another locally?

在 Visual Studio 中,我创建了 2 个 Azure 函数应用 f1f2

我已经更改了两个功能应用程序的端口。

我想从 f1 调用 f2,但出现 NotFound 错误。

我试过在同一个项目和不同的项目中调用 one FunctionAnother Function 都工作正常。

函数 1 示例:

 [FunctionName("Function1")]
    public static async Task<IActionResult> Run(
        [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
        ILogger log)
    {
        log.LogInformation("C# HTTP trigger function processed a request.");
        try
        {
            //Extract Request Param

            var content = await new StreamReader(req.Body).ReadToEndAsync();
            QnAMakerQuestion objQnAMakerQuestion = JsonConvert.DeserializeObject<QnAMakerQuestion>(content);

            //Global Variable for containing message

            dynamic validationMessage;

            // Validate param

            if (string.IsNullOrEmpty(objQnAMakerQuestion.question))
            {
                validationMessage = new OkObjectResult("Question is required!");
                return (IActionResult)validationMessage;
            }
            //Selialize Request Param
            var json = JsonConvert.SerializeObject(objQnAMakerQuestion);
            var stringContent = new StringContent(json, UnicodeEncoding.UTF8, "application/json");
            // Call Function 2 
            HttpClient newClient = new HttpClient();
            HttpResponseMessage responseFromAnotherFunction = await newClient.PostAsync("http://localhost:7073/api/Function2FromApp2", stringContent);
            dynamic response = "";

            if (responseFromAnotherFunction.IsSuccessStatusCode)
            {
                response = responseFromAnotherFunction.Content.ReadAsStringAsync().Result;
            }

            validationMessage = new OkObjectResult(response);
            return (IActionResult)validationMessage;
        }
        catch (Exception ex)
        {
            dynamic validationMessage = new OkObjectResult(string.Format("Something went wrong, please try agian! Reason:{0}", ex.Message));
            return (IActionResult)validationMessage;
        }
    }

函数 2 示例:

  [FunctionName("Function2FromApp2")]
        public static async Task<IActionResult> Run(
            [HttpTrigger(AuthorizationLevel.Anonymous, "get", "post", Route = null)] HttpRequest req,
            ILogger log)
        {
            log.LogInformation("C# HTTP trigger function processed a request.");

            try
            {
                var content = await new StreamReader(req.Body).ReadToEndAsync();
                QnAMakerQuestion objQnAMakerQuestion = JsonConvert.DeserializeObject<QnAMakerQuestion>(content);

                //Global Variable for containing message

                dynamic validationMessage;

                // Validate param

                if (string.IsNullOrEmpty(objQnAMakerQuestion.question))
                {
                    validationMessage = new OkObjectResult("Question is required!");
                    return (IActionResult)validationMessage;
                }
                validationMessage = new OkObjectResult(objQnAMakerQuestion);
                return (IActionResult)validationMessage;
            }
            catch (Exception ex)
            {

                dynamic validationMessage = new OkObjectResult(string.Format("Something went wrong, please try agian! Reason:{0}", ex.Message));
                return (IActionResult)validationMessage;
            }
        }

Class 使用:

   public class QnAMakerQuestion
    {
        public string question { get; set; }

    }

Note: If you run in same project then you wouldn't encounter any problem. But if you run in different project encounter a issue regarding port. To resolve that in local.settings.json file replace below code :

"Host": {

    "LocalHttpPort": 7073

  }

Update Project Properties -> Debug to following

host start --port 7073 --pause-on-error 请参阅下面的屏幕截图:

Post 人测:

我已经在 PostMan 上调用了 Function 1,它调用 Function 1 作为 Function 1 调用 Function 2 并从 [=23 发送响应,反之亦然=] 到 function 1。请参阅下面的屏幕截图:

即插即用,如果您有任何其他问题,请告诉我。