【问题标题】:REST service how to pass JSON for parametersREST服务如何为参数传递JSON
【发布时间】:2015-10-30 10:50:14
【问题描述】:

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

【问题讨论】:

  • 在不破坏OperationContract的情况下,您似乎无法做到这一点,但我很好奇其他人会怎么说。
  • 是的,弗兰克,我是这么认为的

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


【解决方案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 数据中缺少的属性,并为其提供了该属性的默认值。

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

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

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

【讨论】:

  • 谢谢弗兰克。有效。而且,你解释得很清楚。我在这么短但内容丰富的段落中学到了一些东西
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多