繁体   English   中英

将数据填充到调用API终结点的类中的方法

Method for populating data into a class that calls API endpoints not working

提示:本站收集StackOverFlow近2千万问答,支持中英文搜索,鼠标放在语句上弹窗显示对应的参考中文或英文, 本站还提供   中文繁体   英文版本   中英对照 版本,有任何建议请联系yoyou2525@163.com。

我正在尝试调用网络api以获取一些JSON数据并将其解析为我的c#类。 我已经把这部分讲完了,但是我在使用返回的数据(特别是一个字段)时遇到了麻烦,并使用此字段作为参数调用第二个Web api,并获取返回的数据来完成我的模型。 问题是,尝试调用GetZendeskOrgID方法时收到错误消息,该错误状态指出无法将void转换为int。

解决此问题的最佳方法是什么? 提前致谢,

下面的代码:我已经用随机数据擦洗了敏感字段,所以不用担心。

public static async Task PersonQuery()
        {
            using (var client = new HttpClient())
            {
                // Format headers
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                // Request token, and append to headers
                await AddiMISTokenToHeaders(client);
                // Query HTTP Service                
                var response = await client.GetAsync(imisBaseURL + "api/IQA?queryName=$/RAEted");
                if (response.IsSuccessStatusCode)
                {
                    JObject result = JObject.Parse(await response.Content.ReadAsStringAsync());
                    var customersJson = (JArray)result["Items"]["$values"];
                    var customers = new List<IMISCustomer>();
                    foreach (JObject o in customersJson)
                    {
                        var customerJson = (JArray)o["Properties"]["$values"];
                        customers.Add(BuildiMISCustomer(customerJson));
                    }
                    if (customers.Count >= 1)
                    {


                        var persons = customers.Select(async customer => new ZendeskPerson
                        {
                            Name = customer.FullName,
                            Email = customer.Email,
                            external_id = customer.iMISId,
                            WorkPhone = customer.WorkPhone,
                            Organization_id = await GetZendeskOrgID(customer.CompanyiMISID)

                        });
                        var json = JsonConvert.SerializeObject(persons);

    public static async Task<dynamic> GetZendeskOrgID(string CompanyiMISID)

        {

            using (HttpClient client = new HttpClient())
            {
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
                    "Basic", "YWUnMzMUZlOFhS");

                var response = await client.GetAsync("https://zendesk.com/api/v2/organizations/search.json?external_id=" + CompanyiMISID);
                dynamic data = JsonConvert.ToString(response);
               return Convert.ToInt32(data.organization_id);
            }
        }

public class IMISCustomer
        {
            [JsonProperty("ResultRow")]
            public string ResultRow { get; set; }
            [JsonProperty("Work Phone")]
            public string WorkPhone { get; set; }
            [JsonProperty("Email")]
            public string Email { get; set; }
            [JsonProperty("Full Name")]
            public string FullName { get; set; }
            [JsonProperty("iMISId")]
            public string iMISId { get; set; }
            [JsonProperty("Preferred Phone")]
            public string PreferredPhone { get; set; }
            [JsonProperty("CompanyiMISID")]
            public string CompanyID { get; set; }
        }
   public class ZendeskPerson
        {
            [JsonProperty("name")]
            public string Name { get; set; }

            [JsonProperty("email")]
            public string Email { get; set; }

            [JsonProperty("external_id")]
            public string external_id { get; set; }

            [JsonProperty("phone")]
            public string WorkPhone { get; set; }

            [JsonProperty("organization_id")]

            public int Organization_id { get; set; }
        }
2 个回复

在您的GetZendeskOrgIDCompanyID参数可能为空。 如果要求它具有一个值,并且要求该值是一个正整数,则应在该方法中进行错误检查。 就像是:

if(string.IsNullOrEmpty(CompanyID)){
    throw new NullReferenceException("CompanyId cannot be Null", CompanyID);
}
var outNum = -1;
var companyIdInt = Int.TryParse(CompanyId, out outNum)? OutNum : -1
if(companyIdInt<0){
    throw new Exception("CompanyId must be a number greater than -1");
}

或类似的东西...

正如错误所述,它无法将void转换为int,因为organization_id期望使用整数后退形式的函数GetZendeskOrgID(),但是您未从此函数返回任何内容,因此它会像这样返回int我假设您的响应对象具有整数属性,所以您将不得不像这样返回它

 public static async Task<int> GetZendeskOrgID(string CompanyID )

    {
        using (HttpClient client = new HttpClient())
        {
            client.DefaultRequestHeaders.Accept.Clear();
            client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
            client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue(
                "Basic", "YMUZlOFhS");
            var response = await client.GetAsync("https://zendesk.com/api/v2/organizations/search.json?external_id=" + CompanyID);

             return response.oganization_id;
        }
    }
2 保护API调用GAE端点

我正在将移动应用程序编写为从服务器获取数据的瘦客户端。 我正在使用Google App Engine托管后端,并使用它们提供的所有服务。 我正在使用端点公开我的API。 我找到本教程来保护我的API。 我通过api资源管理器进行了测试,一切正常。 如果我未使用Oauth 2,则无法使用 ...

6 如何在 Android 上使用 MVP 模式处理多个改造 api 调用,其中所有端点的数据获取并不重要

我正在实现一个从TMDB api 呈现电影的 android 应用程序。 我已经实现了应用程序的两个部分,让观众观看热门电影,并通过电影与文本搜索(用retrofit2电话)搜索的能力。 现在该应用程序的最后一点,是能够为用户单击的电影提供完整的电影详细信息,将两个额外的 api 端点调用(一个用于 ...

7 API端点除root以外均不起作用

我有一个数字海洋服务器上运行的Node.js的API https://api.bvobaarmoederhals.nl / https://165.22.194.47 ,我有跟GET请求的一些问题。 我可以使用根终结点,但是每当尝试其他终结点之一时,都会收到Cannot GET /50x.ht ...

8 Web API终结点无法在Azure上运行

我已经构建了一个基于Web API的小型服务,该服务在本地运行良好,甚至当我发布到Azure并通过Azure提供的URL访问(例如hostname.azurewebsites.com)时,但是当我使用CNAME记录通过自己的域访问时,我都会收到消息 我是否需要设置一些配置才能允许这样做? ...

9 使用多个API调用填充可变嵌套的字典

我正在使用www.gpcontract.co.uk上的公共API来填充代表英国卫生组织层次结构的大型可变嵌套字典。 一些背景资料 层次结构的最高层是英国的四个国家(英格兰,苏格兰,威尔士和北爱尔兰),然后是区域组织,一直到各个诊所。 每个国家/地区的层次结构深度都不同,并且会根据年 ...

10 处理使用异步API调用填充表格视图

我有2个物件。 Note和User 。 并且有两种API方法。 列出所有笔记。 这是您得到的JSON响应。 请注意,您只能在此响应中获得用户的ID。 因此,要获取用户详细信息(名字,姓氏等),还有另一个API调用。 传递用户ID时,它会提供该用户的详细信息。 这是它的 ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2022 STACKOOM.COM