首页 > 解决方案 > GenericJson WebHook 返回错误请求

问题描述

我正在尝试为 BuildCompleted 事件实现 WebHook。我遇到错误:从 Web 界面测试服务挂钩时出现错误请求 (400) 。事件日志或 IIS 日志文件中似乎没有关于错误的详细信息。WebApiConfig中的Register函数被命中,但我的 WebHook 中的构造函数或ExecuteAsync未命中。

任何帮助将不胜感激!我敢肯定,我似乎能看到自己是微不足道的。

我的设置包括本地 TFS 2018 Update 2 服务器和一个单独的带有用于 WebHook 的 IIS 的 Windwos Server 2012。我将 Global.asax 和 web.config 部署到 wwwroot 并将程序集部署到 wwwroot/bin。

网址:http://MYSERVER/api/webhooks/incoming/genericjson?code=83699ec7c1d794c0c780e49a5c72972590571fd8

网络配置:

...
<appSettings>
    <add key="MS_WebHookReceiverSecret_GenericJson" value="83699ec7c1d794c0c780e49a5c72972590571fd8" />
</appSettings>
...

WebHookHandler:

public class GenericJsonWebHookHandler : WebHookHandler
{
    public GenericJsonWebHookHandler()
    {
        this.Receiver = GenericJsonWebHookReceiver.ReceiverName;
    }

    public override Task ExecuteAsync(string receiver, WebHookHandlerContext context)
    {
        return Task.FromResult(true);
    }
}

WebApiConfig:

public static class 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}
        );

        // Initialize GenericJson WebHook receiver
        config.InitializeReceiveGenericJsonWebHooks();
    }
}

全球.asax.cs

public class Global : HttpApplication
{
    protected void Application_Start()
    {
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }
}

标签: tfswebhooks

解决方案


这只是需要 https 的 GenericJsonWebHookReceiver 的问题,这实际上是由文档指定的。

GenericJsonWebHookReceiver 类声明

TFS 服务挂钩添加屏幕只推荐 https: 在此处输入图像描述

这个答案让我仔细研究了从GetResponse调用到服务的异常中的响应。

{"Message":"WebHook 接收器 'GenericJsonWebHookReceiver' 需要 HTTPS 以确保安全。请注册类型为 'https' 的 WebHook URI。"}


推荐阅读