Tworzenie projektu korzystając z API GitLab'a

0

Pracuje nad skryptami automatyzującymi GIT/GitLab. GitLab API do tworzenia nowego issue za pomocą cURL ma według dokumentacji coś takiego:

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/4/issues?title=Issues%20with%20auth&labels=bug"

Ja używam w HttpRequestMessage więc przerobiłem to na coś takiego:

static async Task<Issue> new_issue(string repository, int appId, string issueTitle, string issueDescription, int assignee_ids) //New ISSUE 
{
    
    string issue_path = which_repo(repository)[0] + "projects/" + appId + "/issues/" + "?title=" + issueTitle + "&description=" + issueDescription + "&assignee_ids=" + assignee_ids;
    using (var request = new HttpRequestMessage(new HttpMethod("POST"), issue_path))
    {
        request.Headers.TryAddWithoutValidation("PRIVATE-TOKEN", which_repo(repository)[1]);
        var response = await client.SendAsync(request);
        var content = await response.Content.ReadAsStringAsync();
        Issue new_issue = JsonConvert.DeserializeObject<Issue>(content);
        Console.WriteLine("Utworzono issue:"+Environment.NewLine+"Tytuł:"+new_issue.title+Environment.NewLine+"Opis:"+new_issue.description+Environment.NewLine+"Assignee:"+new_issue.assignee.name);
        return new_issue;
    }            
}

Mam problem ze zrobieniem tego samego dla zakładania nowego projektu. cURL wygląda tak:

curl --request POST --header "PRIVATE-TOKEN: <your-token>" \
     --header "Content-Type: application/json" 
     --data '{
        "name": "new_project", "description": "New Project", "path": "new_project",
        "namespace_id": "42", "initialize_with_readme": "true"}' \
     --url 'https://gitlab.example.com/api/v4/projects/'

Ktoś podpowie jak to zrobić za pomocą HttpRequestMessage

0
aksimoN napisał(a):

Ktoś podpowie jak to zrobić za pomocą HttpRequestMessage

Pierwszy błąd jaki widać od razu, to to że niepoprawnie budujesz URL.

string issue_path = which_repo(repository)[0] + "projects/" + appId + "/issues/" + "?title=" + issueTitle + "&description=" + issueDescription + "&assignee_ids=" + assignee_ids;

Powinieneś zrobić coś w stylu:

string issue_path = which_repo(repository)[0] + "projects/" + appId + "/issues/" + "?title=" + UrlEncode(issueTitle) + "&description=" + UrlEncode(issueDescription) + "&assignee_ids=" + assignee_ids;
0

Mogę w kilku słowach co to zmieni skoro to co jest działa? Pewnie ustrzeże mnie to przed jakimiś wyjątkami i błędami?

ps. bardziej zależy mi na przerobieniu cURL do zakładania nowego projektu, ten od nowego issue jest podany jako przykład

0
aksimoN napisał(a):

Mogę w kilku słowach co to zmieni skoro to co jest działa? Pewnie ustrzeże mnie to przed jakimiś wyjątkami i błędami?

ps. bardziej zależy mi na przerobieniu cURL do zakładania nowego projektu, ten od nowego issue jest podany jako przykład

Próbowałeś wpisać w Google "why url encode"?

Chodzi o to, że jeśli Twój tytuł albo description miałoby w sobie znaki specjalne url (?, %, #, +, =, etc.) to url który zbudujesz po prostu nie będzie działać albo przekażesz inne dane niż chcesz.

0

a coś bardziej w temacie problemu, czyli jak przerobić cURL na new repo na HttpRequestMessage?

1 użytkowników online, w tym zalogowanych: 0, gości: 1