Как получить учетную запись автоматизации для возврата значений в ASP.NET - PullRequest
0 голосов
/ 29 августа 2018

Я новичок в разработке ASP.NET и использовании веб-крючков. Я использую ASP.NET и учетную запись автоматизации Azure, которая имеет веб-крючок. В настоящее время я могу выполнить webhook, однако я бы хотел, чтобы мой код ждал, пока он не получит выходные данные webhook. Как лучше это сделать?

ASP.NET код:

public ActionResult UpdateAll()
{
    (random db calls)

    string jsonList = JsonConvert.SerializeObject(userEnvironmentList);

    try
    {
        string uri = "webhook_url";

        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);
        string data = jsonList;
        request.Method = "POST";
        request.ContentType = "text/plain;charset=utf-8";

        System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
        byte[] bytes = encoding.GetBytes(data);

        request.ContentLength = bytes.Length;

        using (Stream requestStream = request.GetRequestStream())
        {
            requestStream.Write(bytes, 0, bytes.Length);
        }

        request.BeginGetResponse((x) =>
        {
            using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(x))
            {
                using (Stream stream = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                    String responseString = reader.ReadToEnd();
                }
            }
        }, null);
    }
    catch (Exception ex)
    {
        throw ex;
    }

    return View();
}

PS в учетной записи автоматизации:

param
(
    [Parameter (Mandatory = $false)]
    [object] $WebhookData
)

if ($WebhookData) {
    return "Finally this works"
}

1 Ответ

0 голосов
/ 29 августа 2018

Затем вызовите GetResponse в синхронизированном контексте.

Изменить ...

request.BeginGetResponse((x) =>
        {
            using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(x))
            {
                using (Stream stream = response.GetResponseStream())
                {
                    StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                    String responseString = reader.ReadToEnd();
                }
            }
        }, null);

К ...

var response = (HttpWebResponse)webRequest.GetResponse();
            using (Stream stream = response.GetResponseStream())
            {
                StreamReader reader = new StreamReader(stream, Encoding.UTF8);
                String responseString = reader.ReadToEnd();
            }

примечание: GetResponse () ожидает завершения основного веб-запроса, а затем возвращает результат. нет необходимости использовать BeginGetResponse () в контексте кода.

...