2016-12-05 73 views
1

我想使用HttpClient使用身份驗證令牌發佈到WebAPI。如何使用HttpClient發佈到WebApi?

但是我總是得到WebAPI方法的默認值,而不是我發送的實際值。

這是我的代碼:

C#控制檯應用程序:

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

}