2011-07-26 33 views
8

Sử dụng Fiddler Tôi đăng một thông điệp JSON vào dịch vụ WCF của tôi. Dịch vụ này sử dụng System.ServiceModel.Activation.WebServiceHostFactoryWCF REST POST của JSON: Tham số rỗng

[OperationContract] 
[WebInvoke 
(UriTemplate = "/authenticate", 
     Method = "POST", 
     ResponseFormat = WebMessageFormat.Json, 
     BodyStyle = WebMessageBodyStyle.WrappedRequest 
     )] 
String Authorise(String usernamePasswordJson); 

Khi POST được thực hiện, tôi có thể đột nhập vào mã này, nhưng tham số usernamePasswordJsonrỗng. Tại sao điều này?

Lưu ý: Strangly khi tôi đặt bodystyle để Bare, bài viết thậm chí không đến được với các mã cho tôi để debug.

Dưới đây là màn hình Fiddler: enter image description here

Trả lời

18

Bạn tuyên bố tham số của bạn như kiểu String, vì vậy nó là hy vọng một chuỗi JSON - và bạn đang đi qua một đối tượng JSON với nó.

Tiếp nhận yêu cầu đó, bạn cần phải có một hợp đồng tương tự như hình dưới đây:

[ServiceContract] 
public interface IMyInterface 
{ 
    [OperationContract] 
    [WebInvoke(UriTemplate = "/authenticate", 
      Method = "POST", 
      ResponseFormat = WebMessageFormat.Json, 
      BodyStyle = WebMessageBodyStyle.Bare)] 
    String Authorise(UserNamePassword usernamePassword); 
} 

[DataContract] 
public class UserNamePassword 
{ 
    [DataMember] 
    public string UserName { get; set; } 
    [DataMember] 
    public string Password { get; set; } 
} 
+0

Fantastic. Điều đó làm việc như một giấc mơ. Sau một ngày thất vọng, cuối cùng tôi đã có một giải pháp. –

+0

Tuyệt vời, tôi đã đấu tranh với dữ liệu rỗng được chuyển vào dịch vụ và đề xuất của bạn đã giải quyết được vấn đề. Cám ơn vì đã chia sẻ. – Signcodeindie

+0

Tôi nghĩ rằng dòng ma thuật 'BodyStyle = WebMessageBodyStyle.Bare' là những gì đã làm tôi bối rối quá khứ * không muốn đếm * giờ! Cảm ơn bạn đã đăng đoạn mã này! –

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