1

我在 ASP.NET MVC API 中解析我的模型时遇到了一些问题

这是我的 API 控制器:

public class UserController : ApiController
{
    // Hent liste af personer
    public IEnumerable<UserModel> Get()
    {
        return new UserModel[] { new UserModel(), new UserModel() };
    }

    // Hente enkelt person
    public UserModel Get(int id)
    {
        return new UserModel();
    }

    // Opret person
    [ValidationActionFilter]
    public CreateUserRespose Post([FromBody]UserModel model)
    {
        CreateUserRespose rs = new CreateUserRespose();
        return rs;
    }

    // Rediger person
    public UserModel Put(int id, [FromBody]UserModel model)
    {
        return new UserModel();
    }

    // Slet person
    public UserModel Delete(int id)
    {
        return new UserModel();
    }
}

}

和用户模型:

public class UserModel
{
    [Required]
    [StringLength(500)]
    public String FristName { get; set; }
    [Required]
    [StringLength(500)]
    public String LastName { get; set; }
    [Required]
    [StringLength(250)]
    public String Email { get; set; }
    [Required]
    public String MatrikelId { get; set; }
}

当我通过 Fiddler 使用以下正文调用 Post 命令时

FirstName=Fistname MiddleName&LastName=SomeName&Email=email@email.us&MatrikelId=1234

是否会调用 Post 操作,但模型为空,并且 ModelState.IsValid 为真,如果我不发送正文数据,也会发生同样的情况!我在这里做错了什么?

更新:我尝试将数据作为 json 而不是 Fiddler 发送:

User-Agent: Fiddler
Host: localhost:51268
Content-Length: 102
Content-type: application/json

{"FristName":"Kasper asdasd","LastName":"asdasdasd","Email":"asdaasd@asdasd.us","MatrikelId":"132456asd"}

但是当模型为空时,模型状态不应该是无效的吗?

4

1 回答 1

3

ASP.NET Web API 使用内容协商过程来决定MediaTypeFormatter使用哪个来反序列化请求的主体。对于典型的 POST 请求,它将检查AcceptContent-Type标头。如果不存在,它将使用MediaTypeFormatter列表中的第一个(默认为JsonMediaTypeFormatter)。

在您的情况下,Web API 无法确定正确的MediaTypeFormatter. 向请求添加一个Content-Type值为 的标头应该可以解决该问题。application/x-www-form-urlencoded

如果您想获得有关 ASP.NET Web API 中的FormattersModel BindingContent Negotiation的更详细的知识,我建议您阅读以下内容:

于 2013-03-04T10:43:08.057 回答