使用.NET HttpClient将JSON发送到WebAPI服务器

Dan*_*inu 5 .net c# asp.net-web-api

我正在尝试通过POST使用JSON发送HttpClient到我的Web服务。

发送方法真的很简单:

HttpClient _httpClient = new HttpClient(); 
public async Task<HttpStatusCode> SendAsync(Data data)
    {
        string jsonData = JsonConvert.SerializeObject(data);
        var content = new StringContent(
                jsonData,
                Encoding.UTF8,
                "application/json");
            HttpResponseMessage response = await _httpClient.PostAsync(_url, content);

            return response.StatusCode;
    }
Run Code Online (Sandbox Code Playgroud)

在服务器端,我具有使用以下方法的WebAPI控制器:

    [HttpPost]
    [ActionName("postdata")]
    public async Task<HttpResponseMessage> PostData([FromBody] string jsonParam)
    {
            /// here the jsonParam is null when receiving from HttpClient. 
            // jsonParam gets deserialized, etc
    }
Run Code Online (Sandbox Code Playgroud)

此方法中的jsonParam为null。该jsonData是好的,如果我复制并粘贴到一个请求发送方(我用邮差)一切顺利。

这是关于如何构造内容并使用的信息,HttpClient但是我无法弄清楚出了什么问题。

谁能看到这个问题?

gov*_*vin 4

由于您正在尝试 POST json,因此您可以添加对 System.Net.Http.Formatting 的引用并直接发布“Data”,而无需序列化它并创建 StringContent。

public async Task<HttpStatusCode> SendAsync(Data data)
{
        HttpResponseMessage response = await _httpClient.PostAsJsonAsync(_url, content);

        return response.StatusCode;
}
Run Code Online (Sandbox Code Playgroud)

在接收端,您可以直接接收“Data”类型。

 [HttpPost]
    [ActionName("postdata")]
    public async Task<HttpResponseMessage> PostData(Data jsonParam)
    {

    }
Run Code Online (Sandbox Code Playgroud)

有关这些 HttpClientExtensions 方法的更多信息可以在这里找到 - http://msdn.microsoft.com/en-us/library/hh944521(v=vs.118).aspx