await main.RunWebHookSubscription();
//
public async Task RunWebHookSubscription()
{
Console.WriteLine("Hook waiting");
HttpListener listener = new HttpListener();
listener.Prefixes.Add("http://localhost:8080/hook/");
listener.Start();
Task<HttpListenerContext> context = listener.GetContextAsync();
await HandleRequestAsyncRun(await context);
}
async Task HandleRequestAsyncRun(HttpListenerContext context)
{
var request = context.Request;
var body = WebHookRequestHadler(request);
Console.Write(body);
var eventData = JsonSerializer.Deserialize<WebHookEventData>(body);
//TODO Call method
}
string WebHookRequestHadler(HttpListenerRequest request)
{
if (!request.HasEntityBody)
{
return null;
}
using (System.IO.Stream body = request.InputStream) // here we have data
{
using (var reader = new System.IO.StreamReader(body, request.ContentEncoding))
{
return reader.ReadToEnd();
}
}
After handling the first request my application closed. How can I handle requests permanently?
You need to hand off the context to another thread, and then loop back to accept another connection.
You should also dispose the context with
using, and stop the listener in afinally.Consider using
Console.CancelKeyPressalong with aCancellationTokenSourceto cancel the listener loop.