我将通过c#应用程序上的JIRA REST API更新JIRA中的问题的工作日志.以下代码显示了我到目前为止所做的工作.
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); }
我哪里做错了?请帮我.
可能的原因:您在发送请求流后添加授权标头.
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); }