我有如下的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默认使用。