从控制台应用程序传递参数到web api

本文关键字:web api 参数 控制台 应用程序 | 更新日期: 2023-09-27 18:01:16

我需要从控制台应用程序与web api通信。

api需要像这样传递两个变量/参数给它:

    [HttpPost("api/loans/range/enroll/{loanStart}/{loanEnd}")]
    public IActionResult PostLoanData(DateTime loanStart, DateTime loanEnd)
    {
        Loans.CreateLoanDates(loanStart, loanEnd);
        return NoContent();
    }

在main方法中,我做了这样的操作:

static void Main(string[] args)
{
        var LoanDateRange = new Dictionary<string, string>
                {
                    {"loanStart", startDate.ToString()},
                    {"loanEnd", endDate.ToString()}
                };
        var json = JsonConvert.SerializeObject(LoanDateRange);
        HttpClient client = new HttpClient();
        client.PostAsync("http://mybank1.com/api/loans/range/enroll", new StringContent(json, Encoding.UTF8, "application/json"))
            .ContinueWith(task => {
                var response = task.Result;
                    Console.WriteLine(response.Content.ReadAsStringAsync().Result);
                });
        Console.ReadLine();
 }

当我运行程序时,我只得到一个空异常。

我如何给api它需要从控制台应用程序?或者,我是否可以更改api,以便它能够更好地与控制台应用进行交互?

谢谢!

从控制台应用程序传递参数到web api

试试这个

创建模型
class DateModel 
{
    public DateTime LoadStart {get;set;}
    public DateTime LoadEnd {get;set;}
}

然后更新你的api

[HttpPost("api/loans/range/enroll")]
public IActionResult PostLoanData([FromBody] DateModel loan)
{
    Loans.CreateLoanDates(loan.LoadStart, loan.LoadEnd);
    return NoContent();
}

然后从控制台应用程序调用

static void Main(string[] args)
{
    var LoanDateRange = new DateModel();
        LoanDateRange.LoadStart = startDate.ToString();
        LoanDateRange.LoadEnd = endDate.ToString();
    UploadAsync(LoanDateRange);
    Console.ReadLine();
}
public static  async Task UploadAsync(DateModel LoanDateRange)
    {
        using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://mybank1.com/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                StringContent content = new StringContent(JsonConvert.SerializeObject(LoanDateRange), Encoding.UTF8, "application/json");
                try
                {
                    HttpResponseMessage response = await client.PostAsync("api/loans/range/enroll", content);
                    if (response.IsSuccessStatusCode)
                    {
                        // "Success", MessageBoxButtons.OK);
                    }
                }
                catch (Exception)
                {
                    // ignored
                }
            }
    }

和Newtonsoft的最终版本。Json

public class TestClass
{
    [JsonProperty]
    public string Server { get; set; }
    [JsonProperty]
    public string UserName { get; set; }
    [JsonProperty]
    public List<ShareData> Shares { get; set; }
}
 using (var client = new HttpClient()
 {
      string uri = new Uri("http://myapiendpoint/").ToString();
      string content = JsonConvert.SerializeObject(TestClass);
      var response = await client.PostAsync(uri, new StringContent(content, Encoding.UTF8, "application/json"));
 }