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

时间:2018-10-09 10:35:25

标签: c# .net asp.net-web-api .net-4.0

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

我正在更新动态对象,无法创建任何视图模型。动态对象具有以下结构,并且将用不同的键动态填充:

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对象放入控制器?

也许有什么更好的方法来解决这个问题?

1 个答案:

答案 0 :(得分:1)

我会使用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