AWS API网关/Lambda使用外部API和C#中的ExpandoObject



我正在尝试使用《纽约时报》图书API,我必须使用ExpandoObject在我的函数处理程序中返回它,但我很难弄清楚如何将信息转换为ExpandoObject。现在,当我尝试在mock lambda测试工具中运行它时,它会打印出";未能找到方法FunctionHandler";而不是books对象。任何建议都很好。

namespace newyorktimes
{
public class Function
{
public static readonly HttpClient client = new HttpClient();
static async Task<ExpandoObject> FunctionHandler(string input, ILambdaContext context)
{

string newYorkApi = string.Format("https://api.nytimes.com/svc/books/v3/lists/current/hardcover-fiction.json?api-key=Kz6lZl5qkn6WrGSwQLing2HW7SsjTP0p");
WebRequest requestObjGet = WebRequest.Create(newYorkApi);
requestObjGet.Method = "GET";
HttpWebResponse responseObjGet = null;
responseObjGet = (HttpWebResponse)requestObjGet.GetResponse();
dynamic Object = new ExpandoObject();
Object.List = responseObjGet;
HttpResponseMessage response = await client.GetAsync(newYorkApi);
return Object;
}
}
}

就像注释说不应该将HttpClientWebRequest一起使用一样,后者已被弃用。下面是一个如何做到这一点的例子:

public class Function
{
public static readonly HttpClient client = new HttpClient();
static async Task<ExpandoObject> FunctionHandler(string input, ILambdaContext context)
{

string newYorkApi = string.Format("https://api.nytimes.com/svc/books/v3/lists/current/hardcover-fiction.json?api-key=Kz6lZl5qkn6WrGSwQLing2HW7SsjTP0p");

dynamic Object = new ExpandoObject();
using var response = await client.GetAsync(newYorkApi);
Object.List = await response.Content.ReadAsAsync<dynamic>();
return Object;
}
}

或者直接返回结果而不首先创建ExpandoObject

return await response.Content.ReadAsAsync<dynamic>();

最新更新