2014-10-17 16 views
6

Próbuję utworzyć prosty webhook, aby otrzymać pokwitowanie dostawy z usługi Nexmo SMS. Jedyna dokumentacja na ich stronie internetowej była taka.Jak utworzyć webhook w 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).

Szukałam sposobów, aby to zrobić, i do tej pory mam tę metodę z przykładu znalazłem w internecie, choć nie jestem pewien, czy to jest prawidłowe. W każdym razie, jest to uruchamiane na ASP.NET i na porcie 6563, więc czy jest to port, którego powinienem słuchać? Pobrałem aplikację o nazwie ngrok, która powinna wystawiać mój lokalny serwer internetowy na Internet, więc uruchomiłem aplikację i poleciłem jej słuchanie na porcie 6563, ale bez powodzenia. Próbowałem znaleźć sposób, aby opublikować tę funkcję.

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

Zwykle mogę wywołać funkcję bezpośrednio do powrotu pogląd prostu odwiedzając http://localhost:6563/Home/Index/CallbackURL Więc mam wstawiony punkt przerwania na podpis metody, ale to się nazywa tylko jeśli usunąć [HttpPost] z to. Jakieś kolejne kroki, które powinienem spróbować?

+0

Proszę spojrzeć tu o bardziej szczegółowe informacje: https://neelbhatt40.wordpress.com/2015/10/14/ webhooks-in-asp-net-a-visual-studio-extension/ – Neel

Odpowiedz

0

Problem, który miałem nie był w ogóle z moim webhookiem, tak naprawdę był z IIS Express. Wygląda na to, że blokuje większość ruchu z obcych hostów, więc istnieje pewne ulepszenie, które można wykonać przed tunelowaniem czegokolwiek na serwerze. Jeśli postępujesz zgodnie z tymi instrukcjami, powinieneś mieć działający serwer.

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

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

3

Najpierw należy usunąć bit [HttpPost], ponieważ wyraźnie stwierdza, że ​​"parametry są wysyłane przez GET".

Następnie powinieneś również usunąć zwrot HttpStatusCodeResult (200), ponieważ zwróci kod stanu 200 OK, jeśli nie wystąpi błąd.

Następnie powinieneś po prostu odczytać wartości z querystringu lub użyć wiązania modelu. Oto przykład:

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

Problem w tej chwili jest w stanie odbierać żądania z Internetu. Powiedzmy, że uruchomiłem swój serwer na moim komputerze lokalnym i chcę zadzwonić do mojej funkcji CallbackURL, to mogę po prostu skierować moją przeglądarkę do localhost: 6563/Home/CallbackURL. Ale jak już powiedziałem, potrzebuję tego, aby był publicznie dostępny, więc używam ngrok, aby działać jako pośrednik między żądaniami. Właśnie w tym momencie mam problemy, więc ngrok powinien przekazywać do portu 6563, w którym działa serwer. Jednak kiedy mogę http://domain.ngrok.com/Home/CallbackURL otrzymuję 400 złych żądań. –

+0

Chcę utworzyć subskrybenta i odbiorcę do powiadamiania o e-booku w serwisie eBay. chcę użyć webhook. Czy mogę mieć oba w tej samej aplikacji – coder771