2014-10-17 4 views
6

Ich versuche, einen einfachen Webhook zu erstellen, um eine Lieferquittung von Nexmo SMS-Service zu erhalten. Die einzige Dokumentation auf ihrer Website war dies.Wie erstelle ich einen Webhook in ASP.NET MVC?

During account set-up, you will be asked to supply Nexmo a CallBack URL for Delivery Receipt to which we will send a delivery receipt for each of your SMS submissions. This will confirm whether your message reached the recipient's handset. The request parameters are sent via a GET (default) to your Callback URL and Nexmo will be expecting response 200 OK response, or it will keep retrying until the Delivery Receipt expires (up to 72 hours).

Ich habe nach Möglichkeiten gesucht, dies zu tun, und so weit ich habe diese Methode von einem Beispiel fand ich online, obwohl ich nicht sicher bin, ob dies richtig ist. Wie auch immer, dies wird auf ASP.NET und auf Port 6563 ausgeführt, also ist das der Port, den ich hören soll? Ich habe eine Anwendung mit dem Namen ngrok heruntergeladen, die meinen lokalen Webserver dem Internet zugänglich machen sollte, also habe ich die Anwendung ausgeführt und angewiesen, Port 6563 zuzuhören, aber kein Glück. Ich habe damit herumgetüftelt und versucht, etwas zu dieser Funktion zu finden.

[HttpPost] 
public ActionResult CallbackURL() 
{ 
    System.IO.StreamReader reader = new System.IO.StreamReader(HttpContext.Request.InputStream); 
    string rawSendGridJSON = reader.ReadToEnd(); 
    return new HttpStatusCodeResult(200); 
} 

Normalerweise kann ich die Funktion aufrufen direkt den Blick nur zurückkehren durch den Besuch http://localhost:6563/Home/Index/CallbackURL Also habe ich einen Haltepunkt auf die Methode Signatur eingefügt, aber es wird nur aufgerufen, wenn ich die [Httppost] entfernen es. Irgendwelche nächsten Schritte, die ich versuchen sollte?

+0

Bitte sehen Sie hier für weitere Informationen: https://neelbhatt40.wordpress.com/2015/10/14/ webhooks-in-asp-net-a-visual-studio-erweiterung/ – Neel

Antwort

0

So ist die Ausgabe, die ich war, war nicht mit meinem Webhook überhaupt, war es eigentlich mit IIS Express. Offensichtlich blockiert es den meisten Datenverkehr von fremden Hosts, also gibt es einige Feinabstimmungen, die Sie tun können, bevor Sie irgendetwas zu Ihrem Server tunneln. Wenn Sie diesen Anleitungen folgen, sollten Sie einen funktionierenden Server haben.

https://gist.github.com/nsbingham/9548754

https://www.twilio.com/blog/2014/03/configure-windows-for-local-webhook-testing-using-ngrok.html

3

Zuerst müssen Sie das [HttpPost] -Bit entfernen, da es eindeutig besagt, dass "Parameter über ein GET gesendet werden".

Dann sollten Sie auch die Rückkehr HttpStatusCodeResult (200) entfernen, da es den 200 OK-Statuscode trotzdem zurückgibt, wenn kein Fehler auftritt.

Dann sollten Sie einfach die Werte aus Querystring lesen oder Modellbindung verwenden. Hier ist ein Beispiel:

public string CallbackURL() 
    { 
     string vals = ""; 

     // get all the sent data 
     foreach (String key in Request.QueryString.AllKeys) 
      vals += key + ": " + Request.QueryString[key] + Environment.NewLine; 

     // send all received data to email or use other logging mechanism 
     // make sure you have the host correctly setup in web.config 
     SmtpClient smptClient = new SmtpClient(); 
     MailMessage mailMessage = new MailMessage(); 
     mailMessage.To.Add("[email protected]"); 
     mailMessage.From = new MailAddress("[email protected]"); 
     mailMessage.Subject = "callback received"; 
     mailMessage.Body = "Received data: " + Environment.NewLine + vals; 
     mailMessage.IsBodyHtml = false; 
     smptClient.Send(mailMessage); 

     // TODO: process data (save to database?) 

     // disaplay the data (for degugging purposes only - to be removed) 
     return vals.Replace(Environment.NewLine, "<br />"); 
    } 
+0

Das Problem im Moment ist eigentlich in der Lage, Anfragen aus dem Web zu erhalten. Also, sagen wir, ich betreibe meinen Server auf meiner lokalen Maschine und möchte meine CallbackURL-Funktion aufrufen, dann kann ich meinen Webbrowser einfach an localhost: 6563/Home/CallbackURL richten. Aber wie gesagt, ich brauche es öffentlich zugänglich zu sein, also benutze ich ngrok als Vermittler zwischen Anfragen. Dies ist der Punkt, an dem ich gerade Probleme habe, also sollte ngrok an Port 6563 weiterleiten, wo der Server läuft. Jedoch, wenn ich meine http://domain.ngrok.com/Home/CallbackURL bekomme bekomme ich eine 400 schlechte Anfrage. –

+0

Ich möchte einen Teilnehmer und Empfänger für ebay soap Benachrichtigung erstellen. Ich möchte Webhook verwenden. Kann ich beides in der gleichen Anwendung haben – coder771

1

Microsoft arbeitet an ASP.NET WebHooks, eine neue Ergänzung der ASP.NET-Familie. Es unterstützt ein einfaches HTTP-Muster, das ein einfaches Pub/Sub-Modell für die Verbindung von Web-APIs und SaaS-Services bereitstellt.

Siehe Introducing Microsoft ASP.NET WebHooks Preview

Verwandte Themen