2014-10-01 15 views
10

Tôi có một API NET Web rất đơn giản tổ chức trong Azure, với hai phương pháp rất đơn giản:

[EnableCors(origins: "http://simpleapiearl.azurewebsites.net", headers: "*", methods: "*")] 
public class EnvelopesController : ApiController { 
    // GET: api/Envelopes 
    public IEnumerable<string> Get() { 
     return new string[] { "value1", "value2" }; 
    } 

    // POST: api/Envelopes 
    public string Post([FromBody]Envelope env) { 
     return "rval: " + env + " (and my addition to env)"; 
    } 
} 

Tôi đã tạo một simple plunk để gọi những phương pháp này. Trong mã AngularJS của tôi, tôi đang thực hiện hai cuộc gọi http $ rất đơn giản. GET hoạt động tốt. Tuy nhiên, POST luôn trả về "400 (Yêu cầu không hợp lệ)", ngay sau đó trong giao diện điều khiển WebStorm của tôi bằng "XMLHttpRequestion không thể tải ... Mã trạng thái HTTP không hợp lệ 400".

Bất kỳ và tất cả đề xuất đều được đánh giá cao!

EDIT !!

Xin chào và cảm ơn các phản hồi rất nhanh. Tôi chỉ nhận ra rằng tôi quên thêm một số chi tiết rất có liên quan.

Tham số cho phương thức POST của tôi là phương thức tôi gọi là đối tượng Envelope, chứa hai thuộc tính: listingId (int)Description (string). Khi tôi thêm tiêu đề Loại nội dung được mã hóa url và chuyển '{"listingId":1234, "Description":"some description"}' làm dữ liệu POST của tôi, thông số env trong phương thức POST của tôi trên máy chủ là NULL (có nghĩa là, dường như không thể phân tích cú pháp JSON tôi đang cung cấp). Xin lỗi, điều này đã bị bỏ qua khỏi bài đăng gốc.

+0

kiểm tra xem bạn có bất kỳ thẻ 'xsrf' nào trong biểu mẫu hay không. nếu đó là trường hợp không quên gửi mã thông báo đó. –

+0

Yêu cầu xem trước (OPTIONS) không thành công. Xem liệu điều này có giúp http://stackoverflow.com/questions/17713412/cors-post-requests-not-working-options-bad-request-the-origin-is-not-allow – Chandermani

+0

bản sao có thể có của [Làm thế nào để tôi đăng dữ liệu dạng url được mã hóa với $ http trong AngularJS?] (http://stackoverflow.com/questions/24710503/how-do-i-post-urlencoded-form-data-with-http-in-angularjs) – allenhwkim

Trả lời

17

Tôi nghĩ bài đăng này sẽ hữu ích.

How do I POST urlencoded form data with $http in AngularJS?

Theo mặc định, các dịch vụ http $ sẽ biến đổi theo yêu cầu đi bởi serializing dữ liệu như JSON và sau đó đăng nó với các trang nội dung loại, "application/json". Khi chúng tôi muốn đăng giá trị dưới dạng bài đăng FORM , chúng tôi cần thay đổi thuật toán tuần tự hóa và đăng dữ liệu với loại nội dung, "application/x-www-form-urlencoded".

Đây là plnkr đã được sửa đổi từ của bạn. Mã của bạn thiếu chuyển đổi JSON thành url được mã hóa.

http://plnkr.co/edit/4aeEDz73qgHSfOv1sBgn?p=preview

$http({ 
    method: 'POST', 
    url: 'http://simpleApiEarl.azurewebsites.net/api/envelopes', 
    data: env, 
    headers: {'Content-Type': 'application/x-www-form-urlencoded'}, 
    transformRequest: function(obj) { 
     var str = []; 
     for(var p in obj) 
     str.push(encodeURIComponent(p) + "=" + encodeURIComponent(obj[p])); 
     return str.join("&"); 
    } 
    }). 
+0

Cảm ơn rất trả lời tương tự như những gì tôi đã kết thúc tìm kiếm một thời gian ngắn trước đây. Đạo cụ! – EarlD

+0

np, cấu hình '$ httpProvider.defaults' là một ý kiến ​​hay nếu máy chủ đích không thay đổi. – allenhwkim

+0

@allenhwkim Tôi đã sử dụng cùng một mã trong dự án của tôi lỗi vẫn còn và trong mô tả nó nói "Không hợp lệ Json" .Xin vui lòng hướng dẫn tôi để giải quyết lỗi. – Developer

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