REST服务如何传递JSON作为参数

本文关键字:参数 JSON 何传递 服务 REST | 更新日期: 2023-09-27 18:06:59

我创建了一个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" }

按预期工作。但经过一些代码审查更改后,我将method中的参数更改为

checkEmail(string emailId);

。改成驼峰箱了。我如何修改我的代码使用相同的JSON请求,即API调用应保持相同

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

REST服务如何传递JSON作为参数

这可能适合您。在我做的一个有限的测试中,它是有效的。我创建了一个有两个属性的类:

[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; }
}

JsonPropertyAttribute是Json.NET的一部分。

然后把checkEmail改成:

RestResponse<bool> checkEmail(Emailparms emailParms);

IgnoreAndPopulate基本上是对json数据中缺失的属性进行反序列化,并给它属性的默认值。

现在,在你的方法中,你只需要检查emailParms中的emailIdEmailId的值,并决定使用哪个。

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

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