如何在asp.net mvc中使用请求体

如何在asp.net mvc中使用请求体,asp.net,asp.net-mvc,asp.net-mvc-3,rest,json.net,Asp.net,Asp.net Mvc,Asp.net Mvc 3,Rest,Json.net,我第一次在ASP.NETMVC中做一个小项目。我被要求创建一个REST API,它执行以下操作: 在“/json/party/:acomodation/join”上接受POST请求,其中:acomodation是一个ID 我已经知道了如何让我的API处理:acomodation参数的解析。我就是不知道如何阅读请求正文。例如,我的API消费者希望通过以下请求主体发布到此URL: { "user": { "name": "Hans van Dam",

我第一次在ASP.NETMVC中做一个小项目。我被要求创建一个REST API,它执行以下操作:

  • 在“
    /json/party/:acomodation/join
    ”上接受POST请求,其中:acomodation是一个ID
我已经知道了如何让我的API处理:acomodation参数的解析。我就是不知道如何阅读请求正文。例如,我的API消费者希望通过以下请求主体发布到此URL:

 { "user": 
    { 
        "name": "Hans van Dam",
        "email": "hans@test.nl",
        "straat": "Test street",
        "nummer": "10",
        "woonplaats": "Amsterdam",
        "telefoon": "0687217612",
        "newsletter": true
    },
    "party": {
        "rsvp": 1
        "time": 1370941687
    }
 }
现在我需要读取这个请求体,并将其解析回对象。如何在ASP.NET MVC中执行此操作?

MVC和Web API使用“modelbinder”解析请求并向控制器上调用的操作方法提供参数。要接受请求主体,只需对预期的JSON进行建模,并将其用作操作方法的参数

public class User
{
    public string Name { get; set; }
    // etc
}

public class Party
{
    public bool Rsvp { get; set; }
    // etc
}

public class JoinRequest
{
    public User User { get; set; }
    public Party Party { get; set; }
}
然后在控制器中:

public HttpResponseMessage MyApiEndpoint(string accommodation, JoinRequest joinRequest)
{
    // use joinRequest, i.e.
    // joinRequest.User.Name
}

你检查过更新了吗?非常感谢。我需要为此修改路线吗?默认情况下是否包括模型活页夹?或者我需要为此更改一些配置吗?您不需要更改任何内容。modelbinder搜索URL、请求正文、帖子正文等,以尽可能填充所有参数。谢谢Chris Pratt。我让它工作了。然而,它似乎不适用于API控制器的子类。它与普通控制器的子类一起工作。不知道为什么。有没有可能让它与之一起工作呢?ApiController中的modelbinder有点挑剔。您可以尝试使用
[FromBody]
作为对象参数的前缀,即
[FromBody]JoinRequest
。仅供参考,在ApiController操作中,您只能使用
[FromBody]
一次,因为它流式处理请求正文。非常感谢您的帮助Chris Pratt。