Почему функция Azure отправляет бесконечные HTTP-запросы? - PullRequest
0 голосов
/ 19 октября 2018

У меня есть функция лазури ниже, у меня есть триггер, когда я упоминаю своего бота в чате.Это вызывает функцию Azure, но она отправляет бесконечные сообщения обратно в мою комнату, и я должен остановить всю функцию.

     #r "Newtonsoft.Json"

    using System.Net; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Primitives; using Newtonsoft.Json;

    public static async Task<object> Run(HttpRequestMessage req, TraceWriter log) {
        string jsonContent = await req.Content.ReadAsStringAsync();
        var dto = JsonConvert.DeserializeObject<RootObject>(jsonContent);

        string callerName = dto.data.personEmail;

            using (var httpClient = new HttpClient())
            {
            using (var request = new HttpRequestMessage(new HttpMethod("POST"), "https://****************"))
                {
                    request.Headers.TryAddWithoutValidation("Cache-Control", "no-cache");
                    request.Headers.TryAddWithoutValidation("Authorization", "Bearer *****************************************************");
                    request.Headers.TryAddWithoutValidation("Postman-Token", "**********************"); 

                    var multipartContent = new MultipartFormDataContent();
                    multipartContent.Add(new StringContent(callerName), "markdown");
                    multipartContent.Add(new StringContent("***********************************"), "roomId");
                    request.Content = multipartContent; 

                    var response = await httpClient.SendAsync(request);
                }
            }    

        return req.CreateResponse(HttpStatusCode.OK); 
}
 public class Data {
        public string id { get; set; }
        public string roomId { get; set; }
        public string roomType { get; set; }
        public string personId { get; set; }
        public string personEmail { get; set; }
        public List<string> mentionedPeople { get; set; }
        public DateTime created { get; set; } 
}

    public class RootObject {
        public Data data { get; set; } 
}

1 Ответ

0 голосов
/ 19 октября 2018

Вам нужно связать его как HttpTrigger.В настоящее время ваша функция просто работает без какого-либо запуска.

Существует много типов.

  1. HttpTrigger
  2. TimerTrigger
  3. BlobTrigger
  4. QueueTrigger
  5. EventHubTrigger
  6. SendGridTrigger
  7. Многие другие, упомянутые ниже в примере Microsoft, URL

Пакет для HttpTrigger: https://www.nuget.org/packages/Microsoft.Azure.WebJobs.Extensions.Http

Вам также может понадобиться: https://www.nuget.org/packages/Microsoft.Azure.WebJobs

Пример (от https://docs.microsoft.com/en-us/azure/azure-functions/functions-bindings-http-webhook):

public static async Task<HttpResponseMessage> Run(
[HttpTrigger(AuthorizationLevel.Function, "get", "post", Route = null)]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;

// 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 " + name);
} 
...