2014-06-08 20 views
12

Tôi có một ASP.NET Web API được lưu trữ và có thể truy cập http nhận yêu cầu tốt, bây giờ tôi cần chuyển một vài tham số tới yêu cầu PostAsync như sau:Đăng JSON HttpContent lên ASP.NET Web API

var param = Newtonsoft.Json.JsonConvert.SerializeObject(new { id=_id, code = _code }); 
HttpContent contentPost = new StringContent(param, Encoding.UTF8, "application/json"); 

var response = client.PostAsync(string.Format("api/inventory/getinventorybylocationidandcode"), contentPost).Result; 

Cuộc gọi này trả về kết quả 404 Không tìm thấy.

hành động API

Phía máy chủ trông giống như vậy:

[HttpPost] 
public List<ItemInLocationModel> GetInventoryByLocationIDAndCode(int id, string code) { 
... 
} 

Và chỉ để khẳng định con đường của tôi trên Web API trông như thế này:

config.Routes.MapHttpRoute(
      name: "DefaultApiWithAction", 
      routeTemplate: "api/{controller}/{action}/{id}", 
      defaults: new { id = RouteParameter.Optional } 
); 

Tôi giả sử tôi đang đi qua các JSON HttpContent trên không chính xác, tại sao điều này sẽ trở lại trạng thái 404?

Trả lời

5

Lý do bạn nhận được 404 là do khung không tìm thấy phương thức để thực thi theo yêu cầu của bạn. Theo mặc định, Web API sử dụng các quy tắc sau để ràng buộc các tham số trong các phương thức:

  • Nếu tham số là loại “đơn giản”, Web API sẽ cố gắng lấy giá trị từ URI. Các kiểu đơn giản bao gồm các kiểu nguyên thủy .NET (int, bool, double, vv), cộng với TimeSpan, DateTime, Guid, thập phân và chuỗi, cộng với bất kỳ loại nào có trình chuyển đổi kiểu có thể chuyển đổi từ một chuỗi. (Thông tin thêm về các trình biến đổi kiểu sau.)
  • Đối với các loại phức tạp, Web API cố gắng đọc giá trị từ nội dung thư, sử dụng media-type formatter.

Với những quy tắc, nếu bạn muốn để ràng buộc các tham số từ cơ thể POST chỉ cần thêm một thuộc tính [FromBody] ở phía trước của loại:

[HttpPost] 
public List<ItemInLocationModel> GetInventoryByLocationIDAndCode([FromBody] int id, string code) { 
... 
} 

Để biết thêm thông tin please see the documentation.

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