ASP.. NET post JSON数据到HTTP API与一个身份验证头

本文关键字:一个 身份验证 API post NET JSON 数据 HTTP ASP | 更新日期: 2023-09-27 18:03:23

我有c#代码发送JSON数据到web API,但我一直得到401(未经授权)响应。下面的代码应该根据这个函数正确地发出POST请求,我是对的吗?我也尝试了一些小的变化,得到了同样的结果。

这是发出请求的代码:

public async Task Create()
{
    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri("https://zrh.cloudsigma.com/api/2.0/");
        var testVM = new CS_VM("test");
        var auth = string.Format("{0}:{1}", "mail@mail.com", "password");
        var encoded = Convert.ToBase64String(Encoding.ASCII.GetBytes(auth));
        client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", encoded);
        HttpResponseMessage response = await client.PostAsJsonAsync("servers", testVM);
        if (response.IsSuccessStatusCode)
        {
            var a = "ok";
        }
        else
        {
            var a = "fail";
        }
    }
}

这是作为JSON发送的类:

public class CS_VM
{
    public CS_VM(string type)
    {
        if ("test" == type)
        {
            cpu = 1000;
            mem = 536870912;
            name = "testServer";
            vcn_password = "testserver";
        }
    }
    public string name { get; set; }
    public int cpu { get; set; }
    public int cores { get; set; }
    public int mem { get; set; }
    public string status { get; set; }
    public Owner owner { get; set; }
    public Uri resource_uri { get; set; }
    public string uuid { get; set; }
    public string vcn_password { get; set; }
}

请求头:

Authorization: Basic bWFpbEBtYWlsLmNvbTpwYXNzd29yZA==

和响应头:

Transfer-Encoding: chunked
Connection: keep-alive
Vary: Cookie
X-REQUEST-ID: 2584e232-5bb2-48c0-a307-67e6c03258c0
Date: Sun, 19 Jul 2015 21:39:21 GMT
Server: cloudflare-nginx
WWW-Authenticate: Digest nonce="1437341961.55:6967:0fd0a6b2dcde8f45a5ae288c3b73ee12", realm="users", algorithm="MD5",opaque="b228739d1711b0ff025703aea82ee2a208faaaa7", qop="auth", stale="false", Basic Realm="users"
CF-RAY: 2089941a6935168e-ARN

ASP.. NET post JSON数据到HTTP API与一个身份验证头

WWW-Authenticate: Digest nonce="1437341...看来,这是一个摘要认证。您应该根据您得到的响应构建一个新的授权头。使用您链接的关于web API的方法,并使用Digest Access Authentication部分。第一个401响应给出了noncerealmqop变量

相关文章: