1

我有一个名为 PostUserAccount 的模型,我正在尝试在 ApiController 中使用它作为参数,就像使用 Entity Framework 生成具有读/写操作的控制器时一样

控制器生成器生成的示例:

    // POST api/Profile
    public HttpResponseMessage PostUserProfile(UserProfile userprofile)
    {
        if (ModelState.IsValid)
        {
            db.UserProfiles.Add(userprofile);
          ...etc

我正在使用的代码:

    // POST gamer/User?email&password&role
    public HttpResponseMessage PostUserAccount(PostAccountModel postaccountmodel)
    {
        if (!ModelState.IsValid)
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest, ModelState);
        }

         if (postaccountmodel == null) return Request.CreateResponse(HttpStatusCode.BadRequest, "model is null");

        ...etc

无论出于何种原因,在这种情况下 postaccountmodel 为空,并且运行此 api 命令返回“模型为空”。有任何想法吗?

这是有问题的模型

public class PostAccountModel
{
    [Required]
    public string Email { get; set; }

    [Required]
    public string Password { get; set; }

    public string Role { get; set; }

    public string Avatar { get; set; }

    public string DisplayName { get; set; }
}
4

2 回答 2

2

您正在尝试在 URI 查询字符串中发送模型。问题:

  1. 您的查询字符串格式不正确 - 应该是 ?Email=xxx&Password=xxx& ...

  2. 您需要使用 [FromUri] 属性装饰 postaccountmodel 参数,以告诉 Web API 从 URI 绑定模型

另一种选择是将请求正文中的模型作为 JSON 或 XML 发送。我建议这样做,特别是如果您真的在请求中发送密码。(并使用 SSL!)

本主题介绍 Web API 中的参数绑定:http ://www.asp.net/web-api/overview/formats-and-model-binding/parameter-binding-in-aspnet-web-api

于 2013-07-28T03:42:35.047 回答
-1

尝试将 [FromBody] 属性放在您的 postaccountmodel 参数前面。

http://msdn.microsoft.com/en-us/library/system.web.http.frombodyattribute(v=vs.108).aspx

于 2013-07-27T02:55:39.050 回答