使用动态对象调用 Web Api 2 和 HttpClient

Call Web Api 2 and HttpClient with dynamic object

我目前正在开发 .NET Framework 4.7.2 应用程序。我需要从我的 C# 代码中调用 Web API 控制器。

我正在更新一个动态对象,我无法创建任何 viewmodel.The 动态对象具有以下结构,并将用不同的键动态填充:

List<KeyValuePair<int,Dictionary<string, object>>>

调用代码如下所示:

var task = Task.Run(async () => await UpdateMyInformation(myDynamicObject));
var test = task.Result;

方法实现:

private async Task<dynamic> UpdateMyInformation(dynamic data)
{
    var content = new StringContent(JsonConvert.SerializeObject(data).ToString(), 
        Encoding.UTF8, "application/json");
    var baseUrl = "http://localhost:1234/api/MyInformationController";

    using (HttpClient client = new HttpClient())
    {
        var response = await client.PutAsync(baseUrl, content);
        response.EnsureSuccessStatusCode();
        var result = response.Content.ReadAsStringAsync().Result;
        return result;
    }

}

API 控制器看起来像这样:

public class MyInformationController : ApiController
{
    [HttpPut]
    public async Task<dynamic> Put(dynamic myData)
    {
       // I need to parse data and return the new dynamic object
       // Manipulate myData according to a given logic

        return myData;
    }
}

我可以在我的控制器操作中接收数据,我的问题是:我应该使用动态将 JSON 对象放入我的控制器吗?

解决这个问题的更好方法是什么?

我会使用 JObject 而不是动态的。

public class MyInformationController : ApiController
{
    [HttpPut]
    public async Task<dynamic> Put(JObject myData)
    {
       // I need to parse data and return the new dynamic object
       // Manipulate myData according to a given logic

        return myData;
    }
}

通过使用JObject,您可以根据键访问对象中的属性。请参阅 docs 了解更多信息