我正在创建一个将由android应用程序使用的wcf服务。
我已经声明了一个界面:
[OperationContract]
[WebInvoke(Method = "GET", RequestFormat = WebMessageFormat.Json, ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Bare, UriTemplate = "RegsiterUser")]
string RegsiterUser(RegsiterUser rUser);
在服务代码中:
public string RegsiterUser(RegsiterUser rUser)
{
return rUser.userName;
}
我创建了一个类:
[DataContract]
public class RegsiterUser
{
#region Property
[DataMember]
public string userName { get; set; }
[DataMember]
public string Password { get; set; }
#endregion
}
当调用此服务时,它会给出错误的请求错误:400
我也使用chrome的postmaster应用程序对它进行了测试,同样即将到来,所以如果有任何机构有解决方案,请帮助我。 感谢。
答案 0 :(得分:1)
<强>接口强>
由于您正在使用带参数的GET-Method,您需要在UriTemplate中声明该参数: 具有请求主体的Get-methods在技术上可以工作,但不建议: 有关此主题的更多信息,请参阅此帖子:HTTP GET with request body
因此,您可以将方法更改为POST,并提交JSON,或使用GET和参数。
这将是参数版本的示例:
[OperationContract]
[WebInvoke(Method = "GET",
ResponseFormat = WebMessageFormat.Json,
UriTemplate = "getuserdata/{userName}")]
string RegsiterUser(string userName);
如果你想要POST,只需将方法改为POST,其余的就可以了。
<强>模型强>
我建议指定属性的名称,喜欢这样:通过这种方式,您可以更好地控制JSON,并清楚如何命名属性。
[DataMember(Name = "userName")]
public string UserName { get; set; }