我有一个名为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在这种情况下为null,并且运行此api命令返回" model为null"。任何想法?
这是有问题的模型
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; }
}
答案 0 :(得分:2)
您正尝试在URI查询字符串中发送模型。问题:
您的查询字符串格式不正确 - 应该是?Email = xxx& Password = xxx& ...
您需要使用[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
答案 1 :(得分:-1)
尝试将[FromBody]属性放在postaccountmodel参数前面。
http://msdn.microsoft.com/en-us/library/system.web.http.frombodyattribute(v=vs.108).aspx