从控制台应用程序传递参数到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,以便它能够更好地与控制台应用进行交互?
谢谢!
试试这个
创建模型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"));
}