2016-08-08 10 views
0

Ich muss mit einer Web-API über eine Konsolenanwendung kommunizieren.Parameter an die Web-API aus der Konsolenanwendung übergeben

Die api zwei Variablen benötigt/Parameter, um es wie so übergeben:

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

Also in meinem Haupt-Methode, habe ich etwas wie folgt aus:

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(); 
} 

Als ich das Programm ausführen ich nur Erhalte eine Null-Ausnahme.

Wie kann ich die API geben, was sie von einer Konsolenanwendung benötigt? Oder kann ich die API ändern, damit sie besser mit der Konsolen-App interagieren kann?

Danke!

+1

Wo ist Ihr startdate/endDate initialisierten ??? – Tseng

Antwort

2

Versuchen Sie, diese Art und Weise

Erstellen Sie ein Modell

class DateModel 
{ 
    public DateTime LoadStart {get;set;} 
    public DateTime LoadEnd {get;set;} 
} 

dann aktualisieren Sie Ihre api

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

dann rufen Sie von der Konsole app

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 
       } 
      } 
    } 
+1

Nur ein freundlicher Tipp, können Sie nicht in Main-Methode erwarten;) – Tseng

+1

Und Sie müssen '[FromBody]' Attribut verwenden, wenn Sie ein Modell im Anfragetext als JSON – Tseng

+0

Dank @Tseng übergeben – Mostafiz

Verwandte Themen