c# - How do I receive a custom webhook in an IIS hosted website? -


here have done:

1 - have installed nuget package: microsoft.aspnet.webhooks.receivers.custom 1.2.0-beta

2 - configured webapiconfig receive custom webhooks:

    public static void register(httpconfiguration config)     {         // web api configuration , services          // web api routes         config.maphttpattributeroutes();          config.routes.maphttproute(             name: "defaultapi",             routetemplate: "api/{controller}/{id}",             defaults: new { id = routeparameter.optional }         );          config.initializereceivecustomwebhooks(); //<<<---     } 

3 - set secret key in web.config:

  <appsettings>     <add key="webpages:version" value="3.0.0.0" />     ...     <add key="ms_webhookreceiversecret_genericjson" value="z=secret"/>    </appsettings> 

4 - have written basic receiver (with genericjson hook capture)

public class genericjsonwebhookhandler : webhookhandler {     public static string datareceived;     public genericjsonwebhookhandler()     {         this.receiver = "genericjson";     }      public override task executeasync(string generator, webhookhandlercontext context)     {         // json webhook         jobject data = context.getdataordefault<jobject>();          if (context.id == "i")         {             // stuff         }         else if (context.id == "z")         {             // more stuff             datareceived = data.tostring();              file.create(@"c:\test\test1.txt");         }          return task.fromresult(true);     } } 

now, 1 expect steps above, if webhook sender set publish json iis hosted site, should capture notification json, assign captured data datareceived , write blank text file c:\test\test.txt - which not case

currently, testing using team foundation server send webhook test https://mywebbhooksite.com:5050/?z=secret, , succeeds - however, when check if little test file has been created, it's not there. have javascript running on homepage poll changes datareceived see nothing happening.

mentioning here: have remote debugger attached w3wp.exe process, breakpoint on executeasync , genericjsonwebhookhandler not hit

are there other specific setup needs done in order webhook captured?

i took filthy approach works

i ditched genericjsonwebhookhandler , instead have utilized application_beginrequest() event in webapiapplication instead intercept data posted sender webhook. body of hook resides in httprequest.request.inputstream, can opened using streamreader. contents can read onto string , parsed jobject (if body of request sent webhook request json)

here code.

    protected void application_beginrequest()     {         if (!request.httpmethod.equals("post", stringcomparison.invariantcultureignorecase)) {             return;          }          string documentcontents;         using (var receivestream = request.inputstream)         {             using (var readstream = new streamreader(receivestream, encoding.utf8))             {                 documentcontents = readstream.readtoend();             }         }          try         {             var json = jobject.parse(documentcontents);             file.writealllines(@"c:\test\keys.txt", new[] { documentcontents, "\r\n", json.tostring() });         }         catch (exception)         {              //         }     } 

the test:

i went onto webhook , commenced webhook test. published request json. http 200 response server.

breakpoint hit. httpmethod picked post. request's inputstream read , stored in documentcontents. jobject.parse fired off , put contents of post jobject variable called json

the contents of json written file stored on server - indicating request received.

what plan improve this, security

for security purposes, encrypt secret key set in web.config, , set encrypted key in web.config instead, , after match incoming url query parameters (using same encryption algorithm) see if key present , same


Comments

Popular posts from this blog

javascript - jQuery: Add class depending on URL in the best way -

caching - How to check if a url path exists in the service worker cache -

Redirect to a HTTPS version using .htaccess -