使用http客户端通过帖子发送标题和内容

时间:2018-01-05 10:10:31

标签: c# asp.net json http xamarin

我正在简单地调用API来接收一些数据。我需要发送标题以获得授权我还需要在正文上发送一些内容。这就是我想出的:

public async Task<List<LoremIpsum>> LoremIpsumJson()
    {
        LoremIpsum1 data = null;
        try
        {
            var client = new HttpClient();
            //now lets add headers . 1.method, 2.token
            client.DefaultRequestHeaders.Add("Method", "LoremIpsumExample");
            client.DefaultRequestHeaders.Add("Token", "sometoken");
            HttpContent content = new StringContent("{\"Name\":\"John\",\"Surname\":\"Doe\",\"Example\":\"SomeNumber\"}", Encoding.UTF8, "application/json");
            // ==edit==
             client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            var response = await client.PostAsync("www.theUrlToTheApi", content);
            response.EnsureSuccessStatusCode();
            string json = await response.Content.ReadAsStringAsync();
            data = JsonConvert.DeserializeObject<QueueInfo>(json);
        }
        catch(Exception ex)
        {
            Debug.WriteLine(ex.Message.ToString());
        }
        return data.data;
        Debug.WriteLine(data.data);
    }

应用程序在response.EnsureSuccessStatusCode();之后中断,因为请求显然不成功。 我想我在这里真的很遗憾。我该怎么办电话? 错误是

  

StatusCode:406,ReasonPhrase:&#39;不可接受&#39;

2 个答案:

答案 0 :(得分:1)

这可能有很多原因导致无效。例如:keyvalues.ToString()很可能没有输入您想要的值。好像你可能需要序列化为json而不是仅仅调用.ToString()

首先使用像postman之类的工具,然后让它在那里工作,这样你就有了一个工作示例,然后尝试在C#中重新创建。它会让你的生活更轻松。

答案 1 :(得分:0)

来到这里寻找解决方案的每个人。 HttpContent不能使用标题而不是内容类型。添加内容类型时出现了一个拼写错误,该内容类型应该以这种方式添加到HttpClient中:

PWSTR name = new WCHAR[100];;
PCWSTR folder = TEXT("C:\\Users");
UINT len=100;
int id=0;

HRESULT hr = SHGetLocalizedName(folder, name, len, &id);

if (SUCCEEDED(hr)) {
    wprintf(L"%ls\n", name);
    ExpandEnvironmentStrings(name, name, len);
    HMODULE shell_handle = LoadLibraryEx(name, NULL, DONT_RESOLVE_DLL_REFERENCES | LOAD_LIBRARY_AS_DATAFILE);
    if (shell_handle) {
        if (LoadString(shell_handle, id, name, len) != 0) {
            wprintf(L"%ls\n", name);
        }
        FreeLibrary(shell_handle);
    }
}