ASP.NET WebApi 4发布FromBody不绑定JSON

时间:2013-05-15 19:34:27

标签: json asp.net-web-api

我有一个简单的问题。我正在ASP.NET WebApi 4中构建HTTP REST服务,我在使模型绑定工作时遇到了一些麻烦。

我使用以下代码接受POST HTTP请求并处理登录。从我可以收集的内容中,ASP.NET WebApi 4将为您反序列化JSON并绑定到接受的模型。我已经设置了我的模型,但每当我通过调试器测试服务时,我在UserPostData对象上得到一个NullReferenceExecption。

据我所知,我已将所有设置正确,但它无法正常工作。以下是我发布的JSON。有谁知道我为什么会收到这个错误?

JSON [     {         “用户名”:“mneill”,         “密码”:“12345”     } ]

来自WebApi 4控制器类的代码

public class UserPostData
{
    public string Username { get; set; }
    public string Password { get; set; }
}

public class UserController : ApiController
{
    //
    // GET: /User/

    public string[] Get(string username)
    {
        return new string[]
        {
            "username",
            username
        };
    }

    public HttpResponseMessage Post([FromBody] UserPostData body)
    {
        //string username = postData.Username;
        //string password = postData.Password;

        HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);

        if (body.Username == null)
            response.StatusCode = HttpStatusCode.NotFound;
        if (body.Password == null)
            response.StatusCode = HttpStatusCode.NotFound;

        return response;
    }
}

2 个答案:

答案 0 :(得分:3)

确保您的请求中包含Content-Type标头。

将您的Json修改为如下所示:

{ "Username": "mneill", "Password": "12345" }

并在Post操作中添加以下代码以查看任何模型绑定错误:

if (!ModelState.IsValid)
        {
            throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState));
        }

答案 1 :(得分:1)

我不知道这是否只是您的格式,但您当前的JSON表示包含一个UserPostData类型元素的数组。如果这是真的改变您发送对象而不是数组的请求或更改您的控制器以支持数组。

顺便说一句{I} FromBody是你班级等复杂类型的默认行为。