我试图在JIRA中为特定项目创建version
。
我能够通过Postman手动构建我的请求来完成这个过程,但是在通过.NET创建版本记录时它失败了。
我假设.NET为Postman所做的请求添加了讨厌的参数。
奇怪的是,身份验证调用有效,但版本创建失败。
这是我写的帮手:
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);
}
}
CreateVersion
方法始终失败,带有404。
正如我所说,做同样的事情(检索令牌,创建版本)都可以在Postman中使用。
任何想法会发生什么?
感谢。
答案 0 :(得分:1)
显然,在检索令牌(/rest/auth/1/session
)时,响应包含POSTMAN在第二个请求中发回的cookie(创建版本)。我不得不激怒Fiddler,发现它是这样做的,因为它的UI并没有这样说。
我的.NET客户端没有这样做。当它这样做时,它可以工作。
我有点恼火,REST服务需要cookie ...