以下是来自WPF应用程序的Json输入字符串
{{
"Country of Origin": "UNITED STATES",
"Commodity": "APPLES",
"Variety": "Green",
"Upcs": [
{
"timestamp": "2017-09-19T21:05:12.8550708+05:30",
"value": "038452735329R5"
},
{
"timestamp": "2017-09-19T21:05:12.8550708+05:30",
"value": "038452735330R5"
}
],
"ipAddress": "127.0.0.1",
"lat": "155.00",
"Lot": "101.14",
"long": "-202.00",
"onBehalfOf": "679",
"ClientVersion": "10.0.7",
"submittedBy": "679"
}}
我在.net(VS2015)中创建了一个Rest Api2应用程序,我希望在我新创建的API中接收上面的JSON字符串,以便进行更新处理。
在WPF中,我使用WebClient发送Json字符串。
下面是我试图接收Json字符串的API函数,
[Route("api/events/getevents/{events}/{producerId}")]
[HttpGet, HttpPost]
public async Task<IHttpActionResult> GetEvents(string events, string producerId)
{
try
{
await _getEventsAction.GetEventJson(events, producerId).ConfigureAwait(false);
return Ok("Success");
}
catch (AggregateException ex)
{
return Ok(new { ex.InnerException.Message, Success = false, ex.StackTrace, Exception = ex });
}
catch (Exception ex)
{
return Ok(new { ex.Message, Success = false, ex.StackTrace, Exception = ex });
}
}
在本地运行应用程序之后,我通过证明以下值来测试web浏览器中的api,对于events =“testing”和producerId =“554”,最终端点如下所示,
http://localhost:18572/api/events/getevents/testing/554 - &gt;这种情况下,端点在浏览器中工作正常。但是为了测试上面的api而不是testing
,当我在浏览器web地址中输入整个Json字符串时,浏览器将错误显示为“A potentially dangerous Request.Path value was detected from the client (:).
”。这是由于json字符串之间的双引号和冒号,浏览器显示错误页面。
下面的屏幕,
我想知道,我开发的API函数接收Json字符串是正确的。如果有任何好的方式,请指导我。
我可以通过输入Json字符串来了解测试此API的更好方法。
是否可以在api中接收Json作为对象。
请帮助我编写此API以接收Json字符串或Json对象。
由于
答案 0 :(得分:2)
通常,在需要发送JSON的情况下,您应该发出POST / PUT请求并在请求正文中发送JSON。
这样做:
您需要创建与您的JSON匹配的模型:
[DataContract]
public class MyModel
{
[DataMember(Name = "Country of Origin")]
public string CountryOfOrigin { get; set; }
[DataMember(Name = "Commodity")]
public string Commodity { get; set; }
// other fields
}
另外,请注意我使用DataContract和DataMember属性作为传入 JSON字段未规范化(字段具有空格和不同的大小写 (camelCase和CamelCaps))。
如果要将JSON规范化为camelCase,则可以删除DataContract和DataMember属性。
将控制器中的操作更改为:
[Route("api/events/getevents/{events}/{producerId}")]
[HttpPost]
public async Task<IHttpActionResult> GetEvents(string events, string producerId, [FromBody] MyModel model)
{
// your code
}
最后&#34;型号&#34;参数将填充您从客户端发送的值。
[HttpPost] 属性表示此操作仅适用于POST请求。
[FromBody] 属性表示Web API应该从请求的主体中获取模型。