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

Getting 404 error only when using .NET framework

我正在尝试在 JIRA 中为特定项目创建 version

我可以通过 Postman 手动构建我的请求来完成该过程,但是在通过 .NET 创建版本记录时失败并显示 404。

我假设 .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 中都有效。

有什么想法吗?

谢谢。

显然,在检索令牌 (/rest/auth/1/session) 时,响应包含 POSTMAN 在第二次请求(创建版本)中发回的 cookie。我必须启动 Fiddler 才能发现它正在这样做,因为它 UI 并没有这么说。

我的 .NET 客户端没有这样做。当它这样做时,它起作用了。

我对 REST 服务需要 cookie 感到有点恼火...