3

我有一个简单的问题。我正在 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;
    }
}
4

2 回答 2

3

确保您的请求中存在 Content-Type 标头。

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

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

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

if (!ModelState.IsValid)
        {
            throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.BadRequest, this.ModelState));
        }
于 2013-05-15T19:43:02.950 回答
1

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

顺便说一句,我的事情FromBody是像你的类这样的复杂类型的默认行为。

于 2013-05-15T19:43:44.267 回答