我已经在MVC控制器中设置了一个Actionresult,当访问URL时将调用它(routeconfig),并允许从dialogflow JSON请求中发出请求,然后将解析并处理来自此JSON的JSON在我们的目标上/返回适当的JSON。当我尝试使用流读取器ReadToEndAsync进行此操作时,此操作将无效,并且JObject.Parse失败/错误。
我已经尝试过使用continuewith等方法尝试解析JSON的不同方法,但是这些方法似乎无法按预期工作。
Controller ActionResult
public ActionResult JSONQuery()
{
System.IO.StreamReader reader = new System.IO.StreamReader(System.Web.HttpContext.Current.Request.InputStream);
reader.BaseStream.Position = 0;
var requestFromPost = reader.ReadToEndAsync();
var intentRequestJSON = JObject.Parse(requestFromPost.Result);
//JToken Name = intentRequestJSON.SelectToken("test.name");
return new ContentResult { Content = requestFromPost.Result, ContentType = "application/json" };
}
测试AJAX查询以使我能够在Visual Studio中使用断点进行调试
$.ajax({
url: 'http://localhost/test/',
type: 'POST',
data: {
json: JSON.stringify({
test: "Testing"
})
},
dataType: 'json',
success: function (data) {
alert(data);
},
error: function (data) {
alert("Nope");
}
});
我期望正确解析JSON,因此我可以对键/值对进行逻辑处理。我现在得到的是:
Newtonsoft.Json.JsonReaderException HResult=0x80131500 Message=Unexpected character encountered while parsing value: j. Path '', line 0, position 0. Source=Newtonsoft.Json StackTrace: at Newtonsoft.Json.JsonTextReader.ParseValue() at Newtonsoft.Json.JsonTextReader.Read() at Newtonsoft.Json.Linq.JObject.Load(JsonReader reader) at Newtonsoft.Json.Linq.JObject.Parse(String json) at TestController.<>c.<DiagflowDivertQuery>b__37_0(Task`1 t) in C:\inetpub\wwwroot\test\Web\Controllers\TestController.cs:line 2988 at System.Threading.Tasks.Task.Execute()
答案 0 :(得分:0)
经过一番阅读之后,我发现有效(更简单)的方法是:
公共ActionResult JSONQuery() {
System.IO.StreamReader reader = new System.IO.StreamReader(System.Web.HttpContext.Current.Request.InputStream);
reader.BaseStream.Position = 0;
var requestFromPost = reader.ReadToEndAsync();
dynamic json = JsonConvert.DeserializeObject(requestFromPost.Result);
string intent = json.queryResult.intent.name;
return new ContentResult { Content = requestFromPost.Result, ContentType = "application/json" };
}
希望这对某人有帮助。