2014-01-30 147 views
1

我将通过JIRA REST API在C#应用程序中更新JIRA中的问题的工作日志。以下代码显示了迄今为止所做的工作。C#JIRA工作日志更新错误“远程服务器返回错误:(401)未经授权。”

HttpWebResponse返回此错误“远程服务器返回错误:(401)未经授权。”

我试着用相同的证书和在PHP cURL函数中使用相同的数据,它工作正常,并成功地更新工作日志。

这是我的Jason转换后的序列化对象:{“update”:{“worklog”:[{“add”:{“comment”:“IJ的样本测试评论”,“timeSpent”:“210”}} }]}}

protected string RunQuery(JiraResource resource, string argument = null, string data = null, string method = "PUT") 
{ 
// Where; 
// resource = issue 
// argument = "JIRA-16" 
// Data = {"update":{"worklog":[{"add":{"comment":"Sample test comment by IJ","timeSpent":"210"}}]}} 
// Method = "PUT" 

     string url = string.Format("{0}{1}/", m_BaseUrl, resource.ToString()); 

     if (argument != null) 
     { 
      url = string.Format("{0}{1}", url, argument); 
     } 

// URL = https://companyname.atlassian.net/rest/api/2/issue/JIRA-16 

     HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; 
     request.ContentType = "application/json"; 
     request.Method = method; 
     request.ContentLength = data.Length; 

     using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) 
     { 
      writer.Write(data); 
     } 

     string base64Credentials = GetEncodedCredentials(); // check below 
     request.Headers.Add("Authorization", "Basic " + base64Credentials); 

     HttpWebResponse response = request.GetResponse() as HttpWebResponse;// here returns the error 
//The remote server returned an error: (401) Unauthorized. 

     string result = string.Empty; 
     using (StreamReader reader = new StreamReader(response.GetResponseStream())) 
     { 
      result = reader.ReadToEnd(); 
     } 

     return result; 
} 

private string GetEncodedCredentials() 
{ 
     string mergedCredentials = string.Format("{0}:{1}", m_Username, m_Password); 
     byte[] byteCredentials = UTF8Encoding.UTF8.GetBytes(mergedCredentials); 
     return Convert.ToBase64String(byteCredentials); 
} 

我在哪里做错了?请帮帮我。

回答

5

可能的原因:您在发送请求流后添加授权标头

var request = WebRequest.Create(url) as HttpWebRequest; 
    request.ContentType = "application/json"; 
    request.Method = method; 
    request.ContentLength = data.Length; 

    // All headers MUST be added before writing to request stream 
    request.Headers.Add("Authorization", "Basic " + GetEncodedCredentials()); 

    using (StreamWriter writer = new StreamWriter(request.GetRequestStream())) 
    { 
     writer.Write(data); 
    } 
+0

总是发生!谢谢阿列克谢..它工作正常!!!!!!! – iJay

相关问题