【发布时间】:2018-05-30 02:49:51
【问题描述】:
以下是我来自 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 -> 在这种情况下,端点在浏览器中工作正常。但是为了测试上面的 api,而不是 testing,当我在浏览器网址中输入整个 Json 字符串时,浏览器将错误显示为 "A potentially dangerous Request.Path value was detected from the client (:)." 。这是由于json字符串之间的双引号和冒号,浏览器显示错误页面。
下面的屏幕,
我想知道,我开发的API函数接收Json字符串是正确的。如果有什么好的方法请指导我。
请问有什么更好的方法可以通过输入 Json 字符串来测试此 API。
是否可以在api中接收Json作为对象。
请帮助我编写此 API 以接收 Json 字符串或 Json 对象。
谢谢
【问题讨论】:
-
去掉一个支架怎么样?
-
这可能不是答案,我不确定.. 但看起来你是在一个对象中发送一个对象。您的 JSON 有两个左括号和两个右括号。尝试从每个中删除一个,也许这会有所帮助?
-
您应该创建一个模型来匹配 JSON,然后将其用作带有
[FromBody]装饰器的端点的输入。然后它会以 JSON 的形式进入函数,您可以反序列化到模型。 -
仅供参考。乍一看,您似乎正在尝试创建一个 RESTful API。但是,当您尝试将整个 JSON 结构作为 URL 构成的一部分传入时,就会破坏 REST。您真的想发送一个 POST 请求,并让 JSON 成为该请求的主体。
-
@BrandonMiller 我将尝试删除一个括号。我可以知道如何在 api 中接收 Json 字符串。
标签: c# json asp.net-web-api c#-4.0