2013-10-26 20 views
8

Tôi đang cố truyền đối tượng C# tới bộ điều khiển api trên web. Api được cấu hình để lưu trữ các đối tượng của loại sản phẩm được đăng lên nó. Tôi đã thêm thành công các đối tượng bằng cách sử dụng phương thức Jquery Ajax và bây giờ tôi đang cố gắng để có được kết quả tương tự trong C#.Gửi đối tượng C# tới bộ điều khiển webapi

tôi đã tạo ra một ứng dụng Console đơn giản để gửi một yêu cầu Đăng lên các api:

public class Product 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public string Category { get; set; } 
    public decimal Price { get; set; } 
} 

     static void Main(string[] args) 
    { 
     string apiUrl = @"http://localhost:3393/api/products"; 
     var client = new HttpClient(); 
     client.PostAsJsonAsync<Product>(apiUrl, new Product() { Id = 2, Name = "Jeans", Price = 200, Category = "Clothing" }); 

    } 

Phương pháp postproduct không bao giờ được gọi, làm thế nào để gửi đối tượng này để điều khiển?

Phương pháp được sử dụng để thêm các mục:

public HttpResponseMessage PostProduct([FromBody]Product item) 
    { 
     item = repository.Add(item); 
     var response = Request.CreateResponse<Product>(HttpStatusCode.Created, item); 

     string uri = Url.Link("DefaultApi", new { id = item.Id }); 
     response.Headers.Location = new Uri(uri); 
     return response; 
    } 
+0

Mã của bạn có vẻ ổn, bạn thấy gì trong điều này? Bạn đã bật tính năng dò tìm webapi trên máy chủ chưa? –

+0

Tôi có thể thấy các yêu cầu bắt nguồn từ biểu mẫu mà tôi đang sử dụng không có yêu cầu nào được gửi bởi HttpClient được hiển thị trong Fiddler. Tôi cũng đã tải api lên: http://producttestapi.azurewebsites.net/api/products nhưng không có yêu cầu nào từ HttpClient đạt được api đó. – neo112

+0

cũng, kiểm tra index.html của url đó, đó là hình thức tôi sử dụng để gửi các đối tượng thông qua ajax, mà một trong những công trình để api là ok. – neo112

Trả lời

16

Hình như bạn đã bằng cách nào đó bị vô hiệu hóa chấp nhận JSON như là định dạng cho đăng tải. Tôi đã có thể gửi dữ liệu đến điểm cuối của bạn và tạo sản phẩm mới bằng cách sử dụng application/x-www-form-urlencoded. Đó có lẽ là cách mà yêu cầu jQuery của bạn đang thực hiện nó.

Bạn có thể hiển thị mã cấu hình api trên web của mình không? Bạn có thay đổi các trình định dạng mặc định không?

Hoặc bạn có thể gửi biểu mẫu từ HttpClient. ví dụ.

string apiUrl = "http://producttestapi.azurewebsites.net/api/products"; 
    var client = new HttpClient(); 
    var values = new Dictionary<string, string>() 
     { 
      {"Id", "6"}, 
      {"Name", "Skis"}, 
      {"Price", "100"}, 
      {"Category", "Sports"} 
     }; 
    var content = new FormUrlEncodedContent(values); 

    var response = await client.PostAsync(apiUrl, content); 
    response.EnsureSuccessStatusCode(); 
+0

phương thức ajax có 'dataType: "json"' được định nghĩa. Vì vậy, điều đó khiến tôi nghĩ rằng bộ điều khiển vẫn chấp nhận JSON làm dữ liệu. Tôi đã thêm phương thức xử lý việc thêm các đối tượng mới vào danh sách. Tôi sẽ hiển thị mã cấu hình, đây có phải là tệp .cs từ thư mục App_Start không? Trong khi đó, hãy thử các approuch bạn đăng ở đây. – neo112

+0

Tôi đã có thể sử dụng phương thức PostAsJson cũng sử dụng mã bạn đã cung cấp và giờ nó hoạt động. Cảm ơn ngài rất nhiều! – neo112

+0

Chúng ta có thể làm gì nếu chúng ta có một tham số như mảng chuỗi trong lớp. Tôi không thể đặt nó vào từ điển vì FormUrlEncodedContent không chấp nhận Từ điển Yasitha

Các vấn đề liên quan