2016-12-05 5 views
1

Ich versuche, eine WebAPI mit HttpClient mit einem Authentifizierungstoken zu buchen.Wie man zu WebApi mit HttpClient schreibt?

Allerdings bekomme ich immer Standardwerte auf der WebAPI-Methode nicht die tatsächlichen Werte, die ich sende.

Dies ist mein Code:

C# Konsole APP:

public static async Task<string> Rent(HttpClient client, string token, int idCommunityAmenity, int idHome, DateTime startDate, DateTime endDate) 
     { 

      var request = new HttpRequestMessage(HttpMethod.Post, "http://localhost:50634/api/amenity/RentCommunityAmenity"); 

      request.Headers.Authorization = new AuthenticationHeaderValue("Bearer", token); 
      var postContent = new 
      { 
       idCommunityAmenity = idCommunityAmenity, 
       idHome = idHome, 
       startDate = startDate, 
       endDate = endDate 
      }; 

      request.Content = new StringContent(JsonConvert.SerializeObject(postContent), Encoding.UTF8, "application/json"); 
      var response = await client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead); 
      response.EnsureSuccessStatusCode(); 

      return await response.Content.ReadAsStringAsync(); 
     } 

WebAPI

[HttpPost("RentCommunityAmenity")] 
     public async Task<JsonResult> Post([FromBody]int idCommunityAmenity, [FromBody]int idHome, [FromBody]DateTime startDate, [FromBody]DateTime endDate) 
     { 

      var communityAmenity = new AmenityReservation 
      { 
       IdCommunityAmenity = idCommunityAmenity, 
       StartDate = startDate, 
       EndDate = endDate, 
       IdHome = idHome 
      }; 
      _context.AmenityReservation.Add(communityAmenity); 
      await _context.SaveChangesAsync(); 
      return new JsonResult(true); 
     } 

Meine Vermutung ist, dass der Inhalt nicht korrekt eingestellt wird, denn wenn ich es prüfen Ich sehe die JSON-Zeichenfolge nicht.

Wenn ich die Post-Methode traf ich: idCommunityAmenity = 0, idHome = 0, ...

Danke für die Hilfe.

Antwort

2
  1. erstellen ein Modell für die Daten, die Sie an den WebAPI Endpunkt übergeben.
  2. fügen Sie alle die Validierung hinzu.

so etwas wie:

[DataContract] 
public sealed Class BookingModel 
{ 
    [Required] 
    [DataMember] 
    public int IdCommunityAmenity { get; set; } 

    [DataMember] 
    public DateTime StartDate { get;set;} 

    [DataMember]  
    public DateTime EndDate { get; set; } 

    [Required] 
    [DataMember] 
    public int IdHome { get; set;} 
} 

Verwenden Sie, was andere Validierung Sie auf dem Modell benötigen. DataContract und DataMember stammen aus System.ComponentModel.DataAnnotations, die Sie separat als Referenz hinzufügen. Abhängig von der Einrichtung Ihres Projekts erhält Ihre API manchmal keine Daten von Ihrem Post, da die Property-Member nicht serialisiert werden. Sicherzustellen, dass Sie diese haben, kann tatsächlich viel helfen.

Jetzt in WebAPI Sie Ihr Modell überprüfen gilt wie folgt aus:

[HttpPost("RentCommunityAmenity")] 
public async Task<JsonResult> Post([FromBody] BookingModel) 
{ 
     if (!ModelState.IsValid) 
     { 
      return Request.CreateResponse(HttpStatusCode.BadRequest); 
     } 

     //your code here. 
} 
0

So behebe ich es.

nahm ich den Verweis aus dieser answer

Grundsätzlich müssen Sie ein Objekt auf der WebAPI Seite erhalten.

So:

[HttpPost("RentCommunityAmenity")] 
public JsonResult Post([FromBody]MyModel value) 
{ 
} 
public class MyModel 
{ 
     public int idCommunityAmenity { get; set; } 
     public int idHome { get; set; } 
     public DateTime startDate { get; set; } 
     public DateTime endDate { get; set; } 

} 
Verwandte Themen