仅在使用.NET框架时出现404错误

时间:2017-09-22 16:13:32

标签: c# .net jira-rest-api

我试图在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中使用。

任何想法会发生什么?

感谢。

1 个答案:

答案 0 :(得分:1)

显然,在检索令牌(/rest/auth/1/session)时,响应包含POSTMAN在第二个请求中发回的cookie(创建版本)。我不得不激怒Fiddler,发现它是这样做的,因为它的UI并没有这样说。

我的.NET客户端没有这样做。当它这样做时,它可以工作。

我有点恼火,REST服务需要cookie ...