我使用C#在ASP.NET 4中使用我的Web API遇到了一个小问题.我正在尝试创建一个前端GUI,它通过多个Web API发送和接收数据.拥有多个API的原因与我们的网络有关,该网络由多个安全区域组成.服务器位于不同的区域,一个简单的请求可能需要通过3个不同的API.
具体来说,我正在从GUI向第一个API发送一个JSON对象.应该将JSON对象转发到下一个API,然后从那里创建一个新的JSON对象,并在同一路径下返回.
路径本身工作正常.问题是JSON对象一旦返回GUI就无法解析.我收到一个用引号括起来的JSON字符串,每个API一次.
字符串可能会像这样开始:
Hey! I am a string, or a JSON object of sorts!
API之间的第一跳给了我:
"Hey! I am a string, or a JSON object of sorts!"
在下一跳之后它看起来像这样:
"\"Hey! I am a string, or a JSON object of sorts!\""
当我的GUI掌握它时,我们有这样的事情:
"\"\\\"Hey! I am a string, or a JSON object of sorts!\\\"\""
这是解析失败的原因,原因很明显.JSON对象本身已正确格式化,但所有引号都会导致JSON.net解析器出现问题(对象内的所有引号也会被多次包装).
到目前为止我尝试过的是将请求作为application/json类型和text/plain类型发送.两者都做了同样的事情.API返回一个HttpResponseMessage,使用ReadAsStringAsync()读取.我也试图避免字符串读取,只是直接从HttpRequestMessage读取到HttpResponseMessage并仅在GUI中执行ReadAsStringAsync(),但问题仍然存在.JSON字符串是使用JSON.nets Serialize() - 方法创建的,并使用StringContent()放入HttpContent.这似乎正确地完成了工作.我相信当API和GUI收到HttpResponseMessage时会生成引号.
知道我如何发送和接收JSON字符串作为原始字符串,这是不是以任何方式处理?
我可以通过在每个API上将对象解析为JToken或JObject并再次序列化来绕过此行为.然而,这不是一个好的解决方案 - 我宁愿API只是按照他们获得它的方式转发消息,而不是对它做任何事情.我使用路由查看了前进,但是有许多授权内容正在进行,这需要我使用API操作,而不是重定向路由.
澄清(TLDR):理想的解决方案是让API简单地传递消息而不解析或读取任何内容.只要消息来源被授权,请求就会被加密并且请求的URL有效,消息本身对每个"代理"API都无关紧要.