PostAsJson无法发布数据

时间:2016-09-28 20:49:03

标签: asp.net json.net asp.net-core asp.net-core-mvc jsonserializer

我有如下的Web api方法。 Web API是在Classic .Net 4.6.2

中开发的
    [HttpPost]
    public async Task<IEnumerable<DocumentDTO>> GetDocuments([FromBody]IEnumerable<string> documentNames)
    {
        return await _domainService.GetDocuments(documentNames);
    }

然后我有ASP.Net Core客户端使用HttpClient发布数据。我有自己的扩展方法,使用Newtonsoft.Json.JsonConvert序列化输入并发布它然后反序列化响应

    public static async Task<TResult> MyPostMethodAsync<TSource, TResult>(this HttpClient httpClient, TSource source, string url)
    {
        // serialize the input
        var content = await Task.Factory.StartNew(() => JsonConvert.SerializeObject(source)).ConfigureAwait(false);
        var stringContent = new StringContent(content, Encoding.UTF8, "application/json");

       //post json string
        var httpResponse = await httpClient.PostAsync(url, stringContent).ConfigureAwait(false);

        //ensures ok response
        httpResponse.EnsureSuccessStatusCode();

      // get response string
        var result = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

      //de-serialize the response
        return await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<TResult>(result)).ConfigureAwait(false);
    }

上述方法工作正常。请注意,它使用PostAsync方法。

然后我更改了上述方法,以使用PostAsJsonAsync中提供的Microsoft.AspNet.WebApi.Client扩展方法。所以新方法如下所示

    public static async Task<TResult> MyPostMethodAsync<TSource, TResult>(this HttpClient httpClient, TSource source, string url)
    {
       // post as json
        var httpResponse = await httpClient.PostAsJsonAsync<TSource>(url, source).ConfigureAwait(false);

      // Ensures response is okay
        httpResponse.EnsureSuccessStatusCode();

       // get response string
        var result = await httpResponse.Content.ReadAsStringAsync().ConfigureAwait(false);

        // de-seriazlize the response
        return await Task.Factory.StartNew(() => JsonConvert.DeserializeObject<TResult>(result)).ConfigureAwait(false);
    }

PostAsJsonAsync扩展方法不发布任何数据? Web API方法始终接收文档名参数的空集合。 (我也使用我的扩展方法将数据POST到其他web api方法,但所有POST方法都接收空值或空集合)

我猜测它的序列化/反序列化问题,但我不确定哪个序列化器.Net 4.6.2&amp; .Net Core默认使用。

0 个答案:

没有答案