【问题标题】:AWS API Gateway/Lambda Using External API and ExpandoObject in C#AWS API Gateway/Lambda 在 C# 中使用外部 API 和 ExpandoObject
【发布时间】:2021-07-05 20:37:49
【问题描述】:

我正在尝试使用 New York Times Books API,我必须使用 ExpandoObject 在我的函数处理程序中返回它,但我很难弄清楚如何将信息转换为 ExpandoObject。现在,当我尝试在模拟 lambda 测试工具中运行它时,它会打印出“无法找到方法 FunctionHandler”而不是 book 对象。任何建议都会很棒。

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;
    }
 }
}

【问题讨论】:

  • 所以你同时使用WebRequestHttpClient?摆脱WebRequest 代码。所有的。这是遗产。在client.GetAsync 代码下,添加var myDynamicObject = response.Content.ReadAsAsync&lt;dynamic&gt;(); 即可读取:var value = myDynamicObject.whateverPropertyYouWantToRead;

标签: c# aws-lambda async-await webapi expandoobject


【解决方案1】:

就像 cmets 所说,您不应该将 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>();

【讨论】:

    猜你喜欢
    • 2017-08-24
    • 2017-12-07
    • 2017-06-12
    • 2015-10-05
    • 1970-01-01
    • 1970-01-01
    • 2017-09-19
    • 2017-01-22
    • 2019-12-28
    相关资源
    最近更新 更多