1

我正在开发 WCF 应用程序,我正在调用此操作

[ServiceContract]
public interface IAuditDataService
{

    [OperationContract(Name = "UserAuthentication")]
    [WebInvoke(Method = "POST", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.WrappedRequest, UriTemplate = "/UserAuthentication?username={username}")]
    string UserAuthentication(string username, UserData userInfo); 

}

我收到错误

"Object Reference not set to an instance"

这里

public string UserAuthentication(string username, UserData userInfo)
 {
  string outputData = string.Empty;
  return userInfo.ToString(); // << Error at this line 
 }

这是 JSON 类

[DataContract]
[Serializable()]
public class UserData
{
    [DataMember(Name = "UserName", Order = 1)]
    public string UserName { get; set; }

    [DataMember(Name = "Password", Order = 2)]
    public string Password { get; set; }

    [DataMember(Name = "Token", Order = 3)]
    public string Token { get; set; }
}

这是通过 POST 方法的 JSON 请求

{"UserName":"abcd",
"Password":"1234",
"Token":"1234"}

这是响应屏幕截图在此处输入图像描述

任何帮助!

4

2 回答 2

4

BodyStyle您的属性的[WebInvoke]属性指定样式是WrappedRequest- 这意味着您要作为输入传递的对象必须包装在一个对象中,该对象的成员名称与属性名称相同,正如史蒂夫威尔克斯所说。

另一种选择是将;更改BodyStyleBare在这种情况下,您的输入应该可以正常工作。换句话说,如果这是您的操作声明,那么您在问题中的输入应该有效。

[OperationContract(Name = "UserAuthentication")]
[WebInvoke(Method = "POST",
           ResponseFormat = WebMessageFormat.Json,
           BodyStyle = WebMessageBodyStyle.Bare,
           UriTemplate = "/UserAuthentication?username={username}")]
string UserAuthentication(string username, UserData userInfo); 
于 2013-05-15T16:21:30.880 回答
1

我没有对此进行测试,但您不应该发布:

{
    username: "abcd"
    userInfo: {
        "UserName": "abcd",
        "Password": "1234",
        "Token": "1234"
    }
}

...?

于 2013-05-15T15:27:00.347 回答