C# 在c中从HTTPRequest检索请求有效负载值#
我正在尝试实现自己的LRS以保存TinCanAPI语句,为此,我需要检索请求有效负载中发送的值,该负载存储学习活动语句的详细信息。 在开发者工具中查看WebAPI调用时,我可以看到所需的值,但使用请求对象无法找到它们 如何从请求对象检索请求负载变量?我尝试了request对象并查看了Content和Properties字段,但在C#中似乎看不到要引用的请求负载属性。我的有效载荷如下所示:C# 在c中从HTTPRequest检索请求有效负载值#,c#,asp.net-mvc-4,asp.net-web-api,httpwebrequest,C#,Asp.net Mvc 4,Asp.net Web Api,Httpwebrequest,我正在尝试实现自己的LRS以保存TinCanAPI语句,为此,我需要检索请求有效负载中发送的值,该负载存储学习活动语句的详细信息。 在开发者工具中查看WebAPI调用时,我可以看到所需的值,但使用请求对象无法找到它们 如何从请求对象检索请求负载变量?我尝试了request对象并查看了Content和Properties字段,但在C#中似乎看不到要引用的请求负载属性。我的有效载荷如下所示: { "id": "d3d9aa2a-5f20-4303-84c3-1f6f5b4e9236",
{
"id": "d3d9aa2a-5f20-4303-84c3-1f6f5b4e9236",
"timestamp": "2014-06-26T11:00:41.432Z",
"actor": {
"objectType": "Agent",
"mbox": "mailto:name@company.com",
"name": "My Name"
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/attempted",
"display": {
"und": "attempted"
}
},
"context": {
"extensions": {
"http://tincanapi.com/JsTetris_TCAPI/gameId": "5686f104-3301-459d-9487-f84af3b3915c"
},
"contextActivities": {
"grouping": [
{
"id": "http://tincanapi.com/JsTetris_TCAPI",
"objectType": "Activity"
}
]
}
},
"object": {
"id": "http://tincanapi.com/JsTetris_TCAPI",
"objectType": "Activity",
"definition": {
"type": "http://adlnet.gov/expapi/activities/media",
"name": {
"en-US": "Js Tetris - Tin Can Prototype"
},
"description": {
"en-US": "A game of tetris."
}
}
}
}
public void Put([FromBody]TinCan.Statement statement)
{
var actor = statement.actor;
var context = statement.context;
var target = statement.target;
var timestamp = statement.timestamp;
var verb = statement.verb;
...................
我试过使用:
var test1 = Request.ToString(); **EMPTY STRING**
var test1 = Request.Content.ReadAsStringAsync().Result; **EMPTY STRING**
var test2 = Request.Content.ReadAsFormDataAsync().Result; **THROWS FORMATTER ERROR DESPITE config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("application/json")); added in the webapiconfig.cs
试试这个:
var value = Request["var_name"];
通过如下更改WebAPI控制器,我能够检索已发送的语句值:
{
"id": "d3d9aa2a-5f20-4303-84c3-1f6f5b4e9236",
"timestamp": "2014-06-26T11:00:41.432Z",
"actor": {
"objectType": "Agent",
"mbox": "mailto:name@company.com",
"name": "My Name"
},
"verb": {
"id": "http://adlnet.gov/expapi/verbs/attempted",
"display": {
"und": "attempted"
}
},
"context": {
"extensions": {
"http://tincanapi.com/JsTetris_TCAPI/gameId": "5686f104-3301-459d-9487-f84af3b3915c"
},
"contextActivities": {
"grouping": [
{
"id": "http://tincanapi.com/JsTetris_TCAPI",
"objectType": "Activity"
}
]
}
},
"object": {
"id": "http://tincanapi.com/JsTetris_TCAPI",
"objectType": "Activity",
"definition": {
"type": "http://adlnet.gov/expapi/activities/media",
"name": {
"en-US": "Js Tetris - Tin Can Prototype"
},
"description": {
"en-US": "A game of tetris."
}
}
}
}
public void Put([FromBody]TinCan.Statement statement)
{
var actor = statement.actor;
var context = statement.context;
var target = statement.target;
var timestamp = statement.timestamp;
var verb = statement.verb;
...................
无法将带[]的索引应用于“System.Net.Http.HttpRequestMessage”类型的表达式请注意,它位于asp.Net控制器上,我尝试在其中接收这些值。请参阅:在将内容作为字符串获取后,可以使用System.Web.Script.Serialization类的序列化和反序列化方法。