Как обрабатывать обратные вызовы API в ASP.NET MVC (Helloworks API в моем случае) - PullRequest
0 голосов
/ 15 октября 2019

Согласно их документации по ссылке https://docs.helloworks.com/v3/reference#callbacks

"С API HelloWorks вы можете использовать обратные вызовы, чтобы получать уведомления об определенных событиях. В настоящее время мы поддерживаем обратный вызов, который регистрируется при запуске шага, отменарабочего процесса и завершение рабочего процесса.

URL обратного вызова будет вызываться в соответствии со следующим:

curl -X POST https://your.domain.com/some/path
     -H "X-HelloWorks-Signature: {signature}"
     -H "Content-Type: application/json"
     -d "{payload}

Я не могу понять, как я могу обработать обратный вызов в ASP.NET MVC 4.0. Обратный вызов возвращает данные в формате JSON. Получив данные, я могу отформатировать их в соответствии со своими потребностями и сохранить в базе данных. Но как я могу получить данные в моем контроллере? Руководство от экспертов по API высоко ценится. Заранее спасибо.

Ответы [ 2 ]

1 голос
/ 15 октября 2019

Я не могу понять, как я могу обработать обратный вызов в ASP.NET MVC 4.0.

Вам необходим контроллер API, который принимает запросы POST. Эта конечная точка API затем вызывается API HelloWorks. Причудливое слово для описания этого механизма - Webhook . Хорошее введение можно найти здесь .

Самым базовым будет контроллер типа

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;

namespace MyWebAPI.Controllers
{
    public class WebHookController : ApiController
    {
        // POST: api/webhook
        public void Post([FromBody]string value)
        {
        }
    }
}

Вам нужно зарегистрировать URL https://yourwebsite.domain/api/webhookв API HelloWorks, чтобы он знал, куда отправлять данные.

Возможно, вы хотите защитить эту конечную точку, чтобы другие не могли злоупотреблять этим API. См. документы для некоторых указаний.

Например, в вашем случае вы должны проверить, что заголовок с именем "X-HelloWorks-Signature" отправляется в запросе конечной точке. Значением этого заголовка является хеш, который должен соответствовать значению хеша содержимого, которое вы получили. Чтобы вычислить хеш-код для соответствия, создайте хеш-код с использованием алгоритма SHA-256 и закодируйте результат base16.

Существует также документация от Microsoft по , как создать веб-интерфейс

0 голосов
/ 15 октября 2019

Питер, твое руководство сработало. Я ценю это. Это было прямо, только технический жаргон делает его пугающим :). Ниже приведен код, который работал. Я до сих пор защищаю его с помощью подписи.

[HttpPost]
    public ActionResult Callback()
    {
        string rawBody = GetDocumentContents(Request);
        dynamic eventObj = JsonConvert.DeserializeObject(rawBody);

        Test newTest = new Test();
        newTest.Response = "Bikram-1" + (string)eventObj.type;
        var test = db.Tests.Add(newTest);
        db.SaveChanges();

        return Content("Success!");
    }

    private string GetDocumentContents(HttpRequestBase Request)
    {
        string documentContents;
        using (Stream receiveStream = Request.InputStream)
        {
            using (StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8))
            {
                documentContents = readStream.ReadToEnd();
            }
        }
        return documentContents;
    }
...