繁体   English   中英

从 API 检索数据

[英]Retrieving data from an API

该程序的第一部分是在输入姓名后从 API URL 检索员工用户 ID(或签名)。 (我做过的)

第二部分,用户将输入一个特定的“到”和“从”日期。

使用从第一部分获得的签名和用户输入的日期,程序应该将此信息传递给 API 地址并相应地获取信息。

我的问题是我不确定如何将获得的签名传递给新的 API 地址 +“到”和“从”日期。

检索签名的程序的第一部分(完美运行):

namespace TimeSheets_Try_11.Controllers
{
    class WebAPI
    {

        public string Getsignature(string name)
        {

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            var cookies = FullWebBrowserCookie.GetCookieInternal(new Uri(StaticStrings.UrlIora), false);
            WebClient wc = new WebClient();
            wc.Encoding = System.Text.Encoding.UTF8;
            wc.Headers.Add("Cookie:" + cookies);
            wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            wc.UseDefaultCredentials = true;
            string uri = "";

            uri = StaticStrings.UrlIora + name;

            var response = wc.DownloadString(uri);

            var status = JsonConvert.DeserializeObject<List<Employeename>>(response);

            string signame = status.Select(js => js.signature).First();
            return signame;
        }

到目前为止我写的第二部分:

public string[] GetTime(double fromDate, double toDate, string username)
        {

            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;

            var cookies = FullWebBrowserCookie.GetCookieInternal(new Uri(StaticStrings.UrlNcert), false);
            WebClient wc = new WebClient();
            wc.Encoding = System.Text.Encoding.UTF8;
            wc.Headers.Add("Cookie:" + cookies);
            wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
            wc.UseDefaultCredentials = true;
            string url = "";

            url = StaticStrings.UrlNcert + username + "&fromDate=" + fromDate + "&toDate=" + toDate;
            var respons = wc.DownloadString(url);
            OracleHour ndata = JsonConvert.DeserializeObject<OracleHour>(respons);
            var Get_Odnum = ndata.orderNumber;
            var Dt_Work = ndata.dateOfWork;
            var hrType = ndata.hourType;
            var hr = ndata.hours;
            var des = ndata.description;
            var surname = ndata.surveyor;

            string[] myncertdata = { Get_Odnum, Dt_Work.ToString(), hrType, hr.ToString(), des, surname };
            
            return myncertdata;
            

        }
    }
} 

API 字符串:

namespace TimeSheets_Try_11.Controllers
{
    class StaticStrings
    {
        public static string UrlIora = "https://iora.dnvgl.com/api/dictionary/employee/";
        public static string UrlNcert = "https://cmcservices.dnvgl.com/Finance/api/oracleReportingCost?user=VERIT" + @"\";
    }
}

例如,如果我们使用日期为 9/22/20 - 9/29/20 的名称“Jane Dow”,则 api 字符串将是

 UrlIora = "https://iora.dnvgl.com/api/dictionary/employee/Jane
UrlNcert = "https://cmcservices.dnvgl.com/Finance/api/oracleReportingCost?user=VERIT\JDOW&fromDate=2020-09-22&toDate=2020-09-29"

简单的方法 - 首先将 UrlNcert 更改为 url 而无需查询:

class StaticStrings
{
    public static string UrlIora = "https://iora.dnvgl.com/api/dictionary/employee/";
    public static string UrlNcert = "https://cmcservices.dnvgl.com/Finance/api/oracleReportingCost";
}

然后在您的 api 调用中获取usernamefromDatetoDate并使用字符串插值

var url = $"{StaticStrings.UrlNcert}?user={username}&fromDate={fromDate:yyyy-MM-dd}&toDate={toDate:yyyy-MM-dd}";

如果您想要更复杂的方式,请检查UriBuilder

暂无
暂无

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

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