我写了下面的C#代码来登录JIRA Rest API:
var url = new Uri("http://localhost:8090/rest/auth/latest/session?os_username=tempusername&os_password=temppwd");
var request = WebRequest.Create(url) as HttpWebRequest;
if (null == request)
{
return "";
}
request.Method = "POST";
request.ContentType = "application/json";
request.ContentLength = 200;
request.KeepAlive = false;
using (var response = request.GetResponse() as HttpWebResponse)
{
}
Run Code Online (Sandbox Code Playgroud)
当我执行它时,应用程序继续运行而不返回任何响应.请建议这是否是使用REST API调用JIRA登录的正确方法
Maf*_*elu 35
对于基本身份验证,您需要使用base64编码发送用户名和密码.可以在atlassians开发者页面上的API示例中找到指南:https: //developer.atlassian.com/display/JIRADEV/JIRA+REST+API+Example+-+Basic+Authentication ,如果您在C#中执行此操作,则需要以下列格式发送标头中的编码数据:
"授权:基本[编码证书]"
这是一个简单的例子:
public enum JiraResource
{
project
}
protected string RunQuery(
JiraResource resource,
string argument = null,
string data = null,
string method = "GET")
{
string url = string.Format("{0}{1}/", m_BaseUrl, resource.ToString());
if (argument != null)
{
url = string.Format("{0}{1}/", url, argument);
}
HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest;
request.ContentType = "application/json";
request.Method = method;
if (data != null)
{
using (StreamWriter writer = new StreamWriter(request.GetRequestStream()))
{
writer.Write(data);
}
}
string base64Credentials = GetEncodedCredentials();
request.Headers.Add("Authorization", "Basic " + base64Credentials);
HttpWebResponse response = request.GetResponse() as HttpWebResponse;
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);
}
Run Code Online (Sandbox Code Playgroud)
(JiraResource只是我用来决定使用哪个API部分的枚举)
我希望这个能帮上忙!
这是一个更简单的解决方案,可以根据需要工作:
var mergedCredentials = string.Format("{0}:{1}", username, password);
var byteCredentials = Encoding.UTF8.GetBytes(mergedCredentials);
var encodedCredentials = Convert.ToBase64String(byteCredentials);
using (WebClient webClient = new WebClient())
{
webClient.Headers.Set("Authorization", "Basic " + encodedCredentials);
return webClient.DownloadString(url);
}
Run Code Online (Sandbox Code Playgroud)