2017-09-22 2 views
0

J'essaye de créer un version dans JIRA pour un projet spécifique.Obtenir l'erreur 404 uniquement lors de l'utilisation du framework .NET

Je suis en mesure de faire le processus via Postman en construisant mes demandes manuellement, mais il échoue avec un 404 lors de la création de l'enregistrement de la version via .NET.

Je suppose que .NET ajoute des paramètres gênants à la demande que Postman ne fait pas. La chose étrange est que l'appel d'authentification fonctionne, mais la création de la version échoue.

Voici l'aide que j'ai écrit:

public class JIRA 
{ 
    private string AuthToken { get; set; } 

    private const string c_JIRAUrl = "https://org.atlassian.net"; 

    private const string c_LoginUrl = c_JIRAUrl + "/rest/auth/1/session"; 
    private const string c_CreateVersionUrl = c_JIRAUrl + "/rest/api/2/version"; 


    public JIRA() 
    { 

     //this works... 
     var authResponse = ExecuteRequest(c_LoginUrl, "POST", new 
     { 
      username = "login", 
      password = "password" 
     }); 

     AuthToken = authResponse["session"]["value"].ToString(); 

    } 

    public void CreateVersion(string name, string projectKey, ProjectEnvironment environment) 
    { 
     //lets hardcode the same data I use in Postman for testing purposes... 
     var createVersionResponse = ExecuteRequest(c_CreateVersionUrl, "POST", new 
     { 
      description = "An excellent version", 
      name = "1.1.2", 
      archived = false, 
      released = false, 
      project = "TEST" 
     }); 

    } 

    private JObject ExecuteRequest(string url, string method, object data) 
    { 
     HttpWebResponse response; 
     var jsonDataString = JsonConvert.SerializeObject(data); 
     byte[] dataBytes = Encoding.Default.GetBytes(jsonDataString); 
     var responseText = string.Empty; 

     var wr = (HttpWebRequest)WebRequest.Create(url); 
     wr.ContentType = "application/json"; 
     if (!string.IsNullOrEmpty(AuthToken)) 
      wr.Headers.Add(HttpRequestHeader.Authorization, $"Bearer {AuthToken}"); 
     wr.Method = method; 
     wr.ContentLength = dataBytes.Length; 
     wr.Accept = "application/json"; 

     using (var webStream = wr.GetRequestStream()) 
     { 
      webStream.Write(dataBytes, 0, dataBytes.Length); 
      response = (HttpWebResponse)wr.GetResponse(); 
     } 

     using (var sr = new StreamReader(response.GetResponseStream())) 
     { 
      responseText = sr.ReadToEnd(); 
     } 

     return JObject.Parse(responseText); 
    } 


} 

La méthode CreateVersion échoue toujours avec un 404.

Comme je l'ai dit, faire la même chose (récupérer le jeton, la création de la version) tous les travaux dans le facteur.

Des idées? Que se passe-t-il?

Merci.

Répondre

1

Apparemment, lors de la récupération du jeton (/rest/auth/1/session) la réponse contient des cookies que POSTMAN renvoyait dans la 2ème requête (création de la version). J'ai dû lancer Fiddler pour découvrir que c'était parce que son interface ne le disait pas.

Mon client .NET ne le faisait pas. En le faisant, cela fonctionne. Je suis un peu vexé qu'un service REST attend des cookies ...