以下是来自WPF app的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 Api 2应用程序,我想在我新创建的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 - >这种情况下端点在浏览器中工作正常。但是为了测试上面的api,而不是testing
,当我在浏览器网址中输入整个Json字符串时,浏览器显示错误为“A potentially dangerous Request.Path value was detected from the client (:).
”。这是由于json字符串之间的双引号和冒号,浏览器显示错误页面。
屏幕如下,
请帮助我编写此API以接收Json字符串或Json对象。
谢谢
通常,在需要发送JSON的情况下,您应该发出POST / PUT请求并在请求正文中发送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
}
最后一个“模型”参数将填充您从客户端发送的值。
[HttpPost]属性表示此操作仅适用于POST请求。
[FromBody]属性表示Web API应该从请求的主体中获取模型。