Как передать три параметра через строку API
Я очень новичок в C#. Я пишу программу с использованием visual studio c#, где она сначала попросит пользователя ввести имя сотрудника. Затем он передаст это имя через API и получит и отобразит подпись сотрудника. Я выполнил эту часть.
Далее программа попросит пользователя ввести обозначенные даты "до" и "от". Затем программа должна передать информацию о дате, а также подпись, полученную ранее через второй API, и соответственно получить и отобразить информацию в таблице данных сетки.
Для таблицы данных представления сетки я понимаю, что должен быть подключен к серверу данных SQL, которым я и являюсь.
Моя проблема в том, что
1) я не знаю, как написать код, который будет передавать три параметра API (дату "до" и "от", а также подпись сотрудника). Я попробовал код ниже, однако я получаю ошибку, когда пытаюсь связать соответствующую кнопку с кодом JSON для извлечения данных. Ошибка гласит, что "нет никакого аргумента, соответствующего требуемому формальному параметру 'toDate' из 'WebAPI.GetTime(double, double, string).'
2) я не уверен, как передать подпись, ранее полученную из другого API, через новый API.
Любая помощь будет очень признательна.
Что я уже пробовал:
Код для определения переменных:
namespace TimeSheet_Try11_Models { // Root myDeserializedClass = JsonConvert.DeserializeObject<Root>(myJsonResponse); public class OracleHour { public string orderNumber { get; set; } public DateTime dateOfWork { get; set; } public string description { get; set; } public string surveyor { get; set; } public string hourType { get; set; } public double hours { get; set; } public int status { get; set; } public string savedInOlsonTimezone { get; set; } public double invoicelinevalue { get; set; } public string articleType { get; set; } public DateTime dateOfWorkInSavedTimezone { get; set; } } public class MyArray { public string orderNumber { get; set; } public string projectnumber { get; set; } public string noteToInvoicer { get; set; } public List<object> oracleCosts { get; set; } public List<OracleHour> oracleHours { get; set; } } public class Root1 { public List<MyArray> MyArray { get; set; } } }
Код вызывающий JSON
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}?user={username}&fromDate={fromDate:yyyy-MM-dd}&toDate={toDate:yyyy-MM-dd}"; 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; }
Частичный код при попытке подключения соответствующей кнопки для извлечения данных (ошибка появляется в самой последней строке):
namespace TimeSheets_Try_11 { public partial class Form3 : Form { WebAPI WA = new WebAPI(); public Form3() { InitializeComponent(); webBrowser2.Url = new Uri(StaticStrings.UrlNcert); } private void Form3_Load(object sender, EventArgs e) { // TODO: This line of code loads data into the 'timesDataSet.NCert_Data' table. You can move, or remove it, as needed. this.nCert_DataTableAdapter.Fill(this.timesDataSet.NCert_Data); } private void dataGridView1_CellContentClick(object sender, DataGridViewCellEventArgs e) { } private void GtData_Click(object sender, EventArgs e) { var connetionString = ConfigurationManager.ConnectionStrings["Times"].ConnectionString; try { using (SqlConnection conn = new SqlConnection(connetionString)) { using (SqlCommand cmd = new SqlCommand()) { conn.Open(); using (SqlCommand Sqlcmd = new SqlCommand("NCert_Data", conn)) { Sqlcmd.CommandType = CommandType.StoredProcedure; int counter; string projectnumber; double hrs; string respname; string describe; string[] prjstat; DateTime dates; for (counter = 0; counter < (dataGridView1.RowCount) - 1; counter++) { hrs = 0; projectnumber = dataGridView1.Rows[counter].Cells[1].Value.ToString(); prjstat = WA.GetTime(projectnumber); } } } } } } } }
RickZeeland
Это трудно сказать, есть много API, каждый из которых ожидает параметров в своем собственном формате. Поэтому ищите информацию на веб-сайте или запросите дополнительную информацию у производителя API.