2015-06-06 2 views
0

Я пытаюсь использовать GitLab webhook 'Push events', чтобы уведомлять пользователей о внесении изменений в файл.GitLab WebHook post-receive с WebAPI

Согласно этому GitLab help я должен получить это как тело запроса:

{ 
    "object_kind": "push", 
    "before": "95790bf891e76fee5e1747ab589903a6a1f80f22", 
    "after": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", 
    "ref": "refs/heads/master", 
    "user_id": 4, 
    "user_name": "John Smith", 
    "user_email": "[email protected]", 
    "project_id": 15, 
    "repository": { 
    "name": "Diaspora", 
    "url": "gi[email protected]:mike/diasporadiaspora.git", 
    "description": "", 
    "homepage": "http://example.com/mike/diaspora", 
    "git_http_url":"http://example.com/mike/diaspora.git", 
    "git_ssh_url":"[email protected]:mike/diaspora.git", 
    "visibility_level":0 
    }, 
    "commits": [ 
    { 
     "id": "b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327", 
     "message": "Update Catalan translation to e38cb41.", 
     "timestamp": "2011-12-12T14:27:31+02:00", 
     "url": "http://example.com/mike/diaspora/commit/b6568db1bc1dcd7f8b4d5a946b0b91f9dacd7327", 
     "author": { 
     "name": "Jordi Mallach", 
     "email": "[email protected]" 
     } 
    }, 
    { 
     "id": "da1560886d4f094c3e6c9ef40349f7d38b5d27d7", 
     "message": "fixed readme", 
     "timestamp": "2012-01-03T23:36:29+02:00", 
     "url": "http://example.com/mike/diaspora/commit/da1560886d4f094c3e6c9ef40349f7d38b5d27d7", 
     "author": { 
     "name": "GitLab dev user", 
     "email": "[email protected](none)" 
     } 
    } 
    ], 
    "total_commits_count": 4 
} 

но мой метод WebAPI не решает этот запрос правильно, то, я пытался это

  • public async Task Post()
  • public void Post([FromBody] dynamic value)
  • public void Post([FromBody] PushEvent value) (строго типизированный)

Ни один из вышеперечисленных подходов, похоже, не работает, однако попытка этого в рубине, как показано в example method, не работает.

Так что я полагаю, что это то, что связано с тем, как я использую веб-API. Есть предположения?

My PushEvent Class выглядит следующим образом:

public class PushEvent 
{   
    public string name { get; set; } 
    public string url { get; set; } 
    public string description { get; set; } 
    public string homepage { get; set; } 
    public string git_http_url { get; set; } 
    public string git_ssh_url { get; set; } 
    public int visibility_level { get; set; } 
    public string object_kind { get; set; } 
    public string before { get; set; } 
    public string after { get; set; } 
    public int user_id { get; set; } 
    public string user_name { get; set; } 
    public string user_email { get; set; } 
    public int project_id { get; set; } 
    public IList<Commit> commits { get; set; } 
    public int total_commits_count { get; set; }  

    public class Author 
    { 
     public string name { get; set; } 
     public string email { get; set; } 
    } 

    public class Commit 
    { 
     public string id { get; set; } 
     public string message { get; set; } 
     public DateTime timestamp { get; set; } 
     public string url { get; set; } 
     public Author author { get; set; } 
    }  
} 
+1

Было бы полезно чтобы увидеть, как выглядел ваш объект PushEvent. – peinearydevelopment

+0

Кроме того, когда вы говорите, не разрешая права, что это значит? Вы получаете 404? Ваша точка останова не попадает? Ваша точка останова попадает, но объект не имеет никаких значений и т. Д.? – peinearydevelopment

+0

поэтому в моей ситуации я не могу отладить это, потому что я не могу дать Gitlab webhook URL-адрес localhost, поэтому я публикую свой webapi и даю URL-адрес, например http: abc.com/api/hook. но у меня есть несколько фиктивных сообщений журнала, и с этим я могу подтвердить, что метод не ударяется вообще. –

ответ

0

Я нашел то, что проблема была, это было связано с аутентификацией. Как только я разрешаю метод разрешать анонимность, метод был успешно удален.

1

Я ве встретил тот же вопрос, и проблема была вызвана PAI кодом

следующий мой код: pushEvents:

namespace LuckyGitlabStatWebAPI.Models 
{ 
public class PushEvent 
{ 
    public string object_kind { get; set; } 
    public string before { get; set; } 
    public string after { get; set; } 
    public string @ref { get; set; } 
    public int user_id { get; set; } 
    public string user_name { get; set; } 
    public string user_email { get; set; } 
    public string user_avatar { get; set; } 
    public int project_id { get; set; } 
    public project project; 
    public repository repository; 
    public List<commits> commits; 
    public int total_commits_count { get; set; } 
} 
public class project 
{ 
    public string name { get; set; } 
    public string description { get; set; } 
    public string web_url { get; set; } 
    public string avatar_url { get; set; } 
    public string git_ssh_url { get; set; } 
    public string git_http_url { get; set; } 
    public string @namespace { get; set; } 
    public int visibility_level { get; set; } 
    public string path_with_namespace { get; set; } 
    public string default_branch { get; set; } 
    public string homepage { get; set; } 
    public string url { get; set; } 
    public string ssh_url { get; set; } 
    public string http_url { get; set; } 
} 
public class repository 
{ 
    public string name { get; set; } 
    public string url { get; set; } 
    public string description { get; set; } 
    public string homepage { get; set; } 
    public string git_http_url { get; set; } 
    public string git_ssh_url { get; set; } 
    public int visibility_level { get; set; } 
} 
public class commits 
{ 
    public string id { get; set; } 
    public string message { get; set; } 
    public string timestamp { get; set; } 
    public string url { get; set; } 
    public string added { get; set; } 
    public Array modified; 
    public Array removed { get; set; } 
    public author author; 
} 
public class author 
{ 
    public string name { get; set; } 
    public string email { get; set; } 
} 
} 

API: how to get push info from gitlab hooks with .NET

Смежные вопросы