這裏是我做了什麼:如何在IIS託管的網站上收到自定義webhook?
1 - 我已經安裝了NuGet包:Microsoft.AspNet.WebHooks.Receivers.Custom 1.2.0-β
2 - 我配置了WebApiConfig
以接收自定義網絡掛接:
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.InitializeReceiveCustomWebHooks(); //<<<---
}
3 - 我設立在web.config密鑰:
<appSettings>
<add key="webpages:Version" value="3.0.0.0" />
...
<add key="MS_WebHookReceiverSecret_GenericJson" value="z=SECRET"/>
</appSettings>
4 - 我已經寫了BA SIC接收器(與genericjson鉤捕獲)
public class GenericJsonWebHookHandler : WebHookHandler
{
public static string dataReceived;
public GenericJsonWebHookHandler()
{
this.Receiver = "genericjson";
}
public override Task ExecuteAsync(string generator, WebHookHandlerContext context)
{
// Get JSON from WebHook
JObject data = context.GetDataOrDefault<JObject>();
if (context.Id == "i")
{
// do stuff
}
else if (context.Id == "z")
{
// do more stuff
dataReceived = data.ToString();
File.Create(@"c:\test\test1.txt");
}
return Task.FromResult(true);
}
}
現在,人們所期望的與上面的步驟,如果網絡掛接發送方設置爲發佈JSON來託管網站上的IIS,它應該捕捉通知作爲JSON,捕獲的數據分配給dataReceived
和寫入空白的文本文件c:\test\test.txt
- 這是不是這種情況
目前,我正在測試這種使用Team Foundation Server的一個網絡掛接測試發送到https://mywebbhooksite.com:5050/?z=SECRET
,和它成功 - 然而,當我檢查這個小測試文件是否是crea特德,它不在那裏。我還在主頁上運行了一些JavaScript來輪詢dataReceived
的任何更改,但是我看不到任何事情正在發生。
提的:我有附加到w3wp.exe進程遠程調試器,在ExecuteAsync和GenericJsonWebHookHandler斷點沒有被擊中
是否有需要爲了做任何其他特定設置webhook被捕獲?
您確定您的'context.Id'包含az嗎?我看到它的一個參數名稱,但在這個例子中,我不清楚「context」的內容是什麼。我會驗證你正在通過你的'if/else' if語句正確。 – Tommy
另外 - 你確定你的應用程序有寫訪問該特定位置? – Tommy
@Tommy說了些什麼。你需要做更多的調試。使用記錄器或在本地測試您的處理程序。你不能只將它轉儲到服務器上,並期望我們在腦海中進行調試。如果您想在服務器上調試它,請從「ExecuteAsync」中刪除所有不相關的代碼,並在其中只轉儲一個'File.Create()'語句,僅此而已。 99%的機會IIS用戶帳戶沒有權限寫入'C:\ test'。 – CodeCaster