【问题标题】:ASP.NET MVC API model not parsingASP.NET MVC API 模型不解析
【发布时间】:2015-05-08 19:11:00
【问题描述】:

我在 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 发送 提琴手:

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

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

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

【问题讨论】:

  • 您的请求中的 Content-Type 标头值是什么?
  • 我没有在提琴手中设置一个标题是以下“用户代理:提琴手主机:localhost:51268内容长度:79”
  • 尝试去掉参数前面的[FromBody]
  • @Aviatrix 我试过了,没用
  • 在这种情况下请将其设置为application/x-www-form-urlencoded 它应该可以解决问题。如果您确认这是您的问题,我将在回答中描述详细信息。

标签: asp.net asp.net-web-api


【解决方案1】:

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

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

如果您想了解更多关于 ASP.NET Web API 中的 FormattersModel BindingContent Negotiation 的知识,我建议您进行以下操作阅读:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2015-12-11
    • 2015-08-04
    • 1970-01-01
    • 2010-12-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多