REST服务如何为参数传递JSON

时间:2015-08-07 05:16:18

标签: c# asp.net rest wcf-rest

我创建了一个WCF REST API:

[OperationContract]
[WebInvoke(Method = "POST", RequestFormat = WebMessageFormat.Json,  
           BodyStyle = WebMessageBodyStyle.WrappedRequest,
           ResponseFormat = WebMessageFormat.Json, UriTemplate = "/checkEmail")]
RestResponse<bool> checkEmail(string EmailId);

JSON请求是:

{ "EmailId" :"youremail@yahoo.com" }

它按预期工作。但在一些代码审查更改后,我将方法中的参数更改为

checkEmail(string emailId);

即。把它变成了骆驼的情况。如何修改我的代码以使用相同的JSON请求,即API调用应该保持相同

{ "EmailId" :"youremail@yahoo.com" }

1 个答案:

答案 0 :(得分:1)

这可能适合你。它适用于我做过的有限测试。我创建了一个具有两个属性的类:

[DataContract]
public class EmailParms
{
    [DataMember]
    [JsonProperty(DefaultValueHandling=DefaultValueHandling.IgnoreAndPopulate)]
    public virtual string EmailId { get; set; }
    [DataMember]
    [JsonProperty(DefaultValueHandling=DefaultValueHandling.IgnoreAndPopulate)]
    public virtual string emailId { get; set; }
}

JsonPropertyAttributeJson.NET的一部分。

然后您将checkEmail更改为:

RestResponse<bool> checkEmail(Emailparms emailParms);

IgnoreAndPopulate基本上反序列化了该json数据中缺少的属性,并为其提供了属性的默认值。

现在,在您的方法中,您只需检查emailIdEmailIdemailParms的值,然后决定使用哪个。

在我的测试中,它适用于以下任何一个:

{ "EmailId" :"youremail@yahoo.com" }
{ "emailId" :"youremail@yahoo.com" }
{ "EmailId" :"youremail@yahoo.com", "emailId" :"youremail@yahoo.com" }