C# 在c中从HTTPRequest检索请求有效负载值#

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",

我正在尝试实现自己的LRS以保存TinCanAPI语句,为此,我需要检索请求有效负载中发送的值,该负载存储学习活动语句的详细信息。 在开发者工具中查看WebAPI调用时,我可以看到所需的值,但使用请求对象无法找到它们

如何从请求对象检索请求负载变量?我尝试了request对象并查看了Content和Properties字段,但在C#中似乎看不到要引用的请求负载属性。我的有效载荷如下所示:

{
    "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类的序列化和反序列化方法。