2016-12-05 4 views
1

認証トークンを使用してHttpClientを使用してWebAPIに投稿しようとしています。HttpClientを使用してWebApiに投稿するには?

しかし私は実際に送信している値ではなく、WebAPIメソッドで常にデフォルト値を取得しています。

これは私のコードです:

C#コンソール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(); 
     } 

私はそれを点検するときので

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

WebAPIのは、私の推測では、コンテンツが正しく設定されていないことです私はjsonの文字列が表示されません。私は、POSTメソッドを打つとき

は私が取得:助けを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

これは私がそれを修正する方法です。

私は基本的にはWebAPIの側のオブジェクトを受信する必要がこのanswer

からの参照を取りました。このよう

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

} 
関連する問題