2016-12-05 10 views
1

Я пытаюсь отправить в WebAPI, используя HttpClient, используя токен аутентификации.Как отправить в WebApi с помощью HttpClient?

Однако я всегда получаю значения по умолчанию для метода WebAPI, а не фактические значения, которые я отправляю.

Это мой код:

C# Console 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); 
     } 

Мое предположение о том, что содержание не установлено правильно, потому что, когда я проверить его Я не вижу строку json.

Когда я попал метод пост я получаю: idCommunityAmenity = 0, idHome = 0, ...

Спасибо за помощь.

ответ

2
  1. создать модель данных, которые вы передаете в WebAPI конечной точке.
  2. добавьте все подтверждения на него.

что-то вроде:

[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;} 
} 

Используйте любые другие проверки, которые нужны на модели. DataContract и DataMember поступают из System.ComponentModel.DataAnnotations, которые вы добавляете в качестве ссылки отдельно. Иногда, в зависимости от того, как настроен ваш проект, ваш api не получит данные из вашего сообщения, потому что члены собственности не сериализуются. Удостовериться, что у вас есть те, которые могут реально помочь.

Теперь в WebAPI вы можете проверить вашу модель действует следующим образом:

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

     //your code here. 
} 
0

Так я исправляю это.

Я взял ссылку из этого answer

В основном вы должны получить объект на стороне WebAPI.

Как это:

[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; } 

}