2017-11-10 3 views
0

내 API 요청이 작업 항목 생성 이벤트에 대한 Rest API를 통한 VSTS ServiceHooks (WebHooks) 만들기가 실패합니다. 해결책을주십시오

로 URL : https://kogul-ceymplon.visualstudio.com/_apis/hooks/subscriptions?api-version=4.1-preview

방법 : POST

내용 : " {\"publisherId의 \ "의"응용 프로그램/JSON " \ "EventType \": \ "workitem.created \", \ "ResourceVersion \": \ "1.0-preview.1 \", \ "ConsumerId \": \ "webHooks \", \ " \ "ConsumerInputs \": \ "PublisherInputs \": \ "ProjectId \": \ "d028a77b-50c4-4bdc-943d-6b072799b884 \"}, \ "ConsumerInputs \": {\ "Url \" : \ " https://myservice/newreceiver \ "}}"

헤더 : "1", "의 InnerException": NULL, "메시지"Bearer {accesToken}

내 응답
{ "$ ID가"있는 그대로 " TF400898 : 내부 오류가 발생했습니다. 활동 ID : 31deba9c-369c-4a31-9be3-67af8ce6249e. ","typeName ":"System.Exception, mscorlib ","typeKey ":"예외 ","errorCode ": 0,"eventId ": 0}

코드 :

'using (HttpClient client = new HttpClient()) 
       { 
        client.DefaultRequestHeaders.Accept.Add(
         new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json")); 

        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Bearer", accessToken); 

        ServiceHook hook = new ServiceHook(); 
        hook.PublisherId = "tfs"; 
        hook.EventType = "workitem.created"; 
        hook.ResourceVersion = "1.0-preview.1"; 
        hook.ConsumerId = "webHooks"; 
        hook.ConsumerActionId = "httpRequest"; 
        hook.PublisherInputs = new PublisherInput 
        { 
         projectId = "d028a77b-50c4-4bdc-943d-6b072799b884" 
        }; 
        hook.ConsumerInputs = new ConsumerInput 
        { 
         url= "https://myservice/newreceiver" 
        }; 
        var javaScriptSerializer = new System.Web.Script.Serialization.JavaScriptSerializer(); 
        string jsonString = javaScriptSerializer.Serialize(hook); 

        var request = new HttpRequestMessage(HttpMethod.Post, "https://kogul-ceymplon.visualstudio.com/_apis/hooks/subscriptions?api-version=4.1-preview"); 
        request.Content = new StringContent(jsonString, Encoding.UTF8, "application/json"); 
        string ccc = request.Content.ReadAsStringAsync().Result; 
        using (HttpResponseMessage response = client.SendAsync(request).Result) 
        { 
         response.EnsureSuccessStatusCode(); 
         string responseBody = await response.Content.ReadAsStringAsync(); 
         return responseBody; 
        } 
       }' 

내 옆에 결함이 될 수 무엇

+0

VSTS 확장으로 서비스 멍청한 소리를 만드나요? 어떻게 AccessToken을 얻습니까? 세부 코드가 뭐니? –

+0

그것은 C#에서 MVC 웹 응용 프로그램입니다. OAuth를 사용하여 acess 토큰을 얻습니다. –

+0

@ starain-MSFT 코드가 질문에 추가되었습니다. –

답변

0

첫째, JSON은 workitem.created 이벤트 유형에 대한 잘못된 것입니다, 당신은 영역과 작업을 지정해야합니다 (A은 webhook를 만들어보십시오 수동으로 입력을 확인하십시오)

json은 다음과 같을 수 있습니다.

{ 
    "consumerActionId":"httpRequest", 
    "consumerId":"webHooks", 
    "consumerInputs":{ 
     "url":"XXX" 
    }, 
    "eventType":"workitem.created", 
    "publisherId":"tfs", 
    "publisherInputs":{ 
     "areaPath":"[area path]", 
     "workItemType":"Task", 
     "projectId":"[project id]" 
    }, 
    "resourceVersion":"1.0" 
} 

이 두 번째로, 내 테스트를 기반으로, 우리는 workitem.created 이벤트 유형과은 webhook을 생성하여 OAuth 토큰을 사용할 수 없습니다, 그 오류가 발생합니다. (build.complete EventType을 사용하여 웹 훅을 만들 수 있음) 대신 개인 액세스 토큰 또는 대체 계정을 사용할 수 있습니다.

여기에 의견을 제출하십시오 : Create webhook with workitem.created EventType and OAuth token fail, 당신은 투표하고 따라갈 수 있습니다.

+0

예, 동의합니다. OAuth Token이있는 workitem.created EventType을 사용하여 webhook을 만들 수없는 이유는 무엇입니까? 그렇다면 응답이 적절한 것이어야합니다. 왜 응답 ** 내부 서버 오류 **입니까? –

+0

REST API에 문제가 있다고 생각합니다. 의견을 제출 했으므로 투표하고 따라갈 수 있습니다. –

+0

개인 액세스 토큰이나 대체 계정을 대신 사용할 수 있습니다. –