Tôi nhận được những gì tôi coi là một vấn đề ràng buộc lạ trong ASP.NET MVC 4 RC Web API. Tôi có một phương pháp nhằm chấp nhận các yêu cầu đăng bài từ khách hàng. Vấn đề là không có tham số nào ràng buộc khi phương thức post được gọi, tôi nhận được điểm break của mình trên dòng và tên, email đều là null. Nếu tôi thay đổi kiểu yêu cầu GET trong JavaScript, thì hàm Get bên dưới được gọi với các tham số bị ràng buộc.ASP.NET MVC 4 RC Web API Tham số Binding vấn đề
Tại sao các tham số không ràng buộc cho phương thức Đăng và cách tôi có thể sửa lỗi này?
send: function(evt) {
evt.preventDefault();
$.ajax({
url: '/api/person',
data: this.model.toJSON(),
type: "POST",
dataType: "json",
success: function(data) {
console.log("Success");
},
error: function(data) {
console.log("Error");
}
});
}
Sau đây là những hành động điều khiển:
public void Get(string name, string email) {
throw new NotImplementedException();
}
public void Post(string name, string email) {
throw new NotImplementedException();
}
Ghi chú:
- Tôi đang sử dụng tất cả các giá trị mặc định cho ASP.NET MVC 4 RC Web API (Vì vậy, các deserializer nên là Json.NET)
- Tab mạng Chrome trên trình gỡ lỗi JS hiển thị các thông số trong dữ liệu biểu mẫu trên bài đăng chính xác.
Thông số nhận của tôi không bị vô hiệu, thực tế nó không tồn tại. Tôi có thể không rõ ràng nhưng nó chỉ ở đó để minh họa rằng chức năng hoạt động trên GET và không có trên POST. – Cody
Được rồi - tốt, vậy thì tốt :). Trong ngắn hạn, mặc dù, nếu bạn đang ràng buộc nhiều thông số từ cơ thể của yêu cầu, về cơ bản điều dễ nhất để làm là viết một kiểu mô hình đơn giản như tôi đã hiển thị. –
Cảm ơn bạn đã liên kết bài viết Mike Stall, nó rất thông tin về những gì đang diễn ra. Tôi vừa cho rằng Web API đã sử dụng cùng một chiến lược ràng buộc giống như MVC. Tạo một lớp tùy chỉnh để nhận được các params làm việc như một sự quyến rũ, tôi không phải là một fan hâm mộ của giải pháp đó nhưng tôi không thể tìm ra lý do tại sao, vì vậy tôi có lẽ chỉ là cứng đầu. :) Trong mọi trường hợp, đó là giải pháp tôi sẽ sử dụng. Cảm ơn!:) – Cody