非静态方法需要webapi中的目标

时间:2016-10-20 10:35:03

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

我想在控制器中发送HTTP POST请求。

这是我的代码:

[HttpPost]
public IHttpActionResult login([FromBody] ClubAPI.Models.AllRequest.login userid)
{
    using (DAL.ClubEntities db = new ClubEntities())
    {
        DAL.AspNetUser q = db.AspNetUsers.Single(t=>t.Id.Equals(userid.id.ToString()));

        if (q == null)
        {
            return Ok(new ClubAPI.Models.AllResponse.loginResponse
            {
                msg = "bad",
                state = false,
            });
        }
        return Ok(new ClubAPI.Models.AllResponse.loginResponse
        {
            msg = "good",
            state = true,
            token = q.UserName,
        });
    }
}

但现在我收到以下错误:

  

"非静态方法需要webapi中的目标"我无法解决这个问题。该   错误与此行有关:   db.AspNetUsers.Single(T => t.Id.Equals(userid.id.ToString()));

当我将ID更改为真实ID时,例如" t.Id.Equals(2342)",错误已解决;但我不想使用真实的身份证。

4 个答案:

答案 0 :(得分:1)

Try this code instead of
DAL.AspNetUser q = db.AspNetUsers.SingleOrDefault(t=>t.Id == userid.id.ToString());
into
DAL.AspNetUser q = db.AspNetUsers.SingleOrDefault(t=>t.Id == userid.id);

答案 1 :(得分:0)

确保此userid而非nulluserid.id.ToString()未返回null

DAL.AspNetUser q = db.AspNetUsers.Single(t=>t.Id.Equals(userid.id.ToString()));

当任何lambda变量返回null时,就会发生这种类型的错误。

为了防止这种情况,您可以这样做

DAL.AspNetUser q = db.AspNetUsers.SingleOrDefault(t=>t.Id == userid.id.ToString());

答案 2 :(得分:0)

看来您的问题出现在以下行中,可能找不到用户:

DAL.AspNetUser q = db.AspNetUsers.Single(t=>t.Id.Equals(userid.id.ToString()));

写它(取决于id的类型),当找不到用户时将返回null:

DAL.AspNetUser q = db.AspNetUsers.SingleOrDefault(t=>t.Id == userid.id.ToString());

答案 3 :(得分:0)

If t.Id.Equals(2342) works, then t.Id must not be a string and so you shouldn't be using .ToString()

Try

db.AspNetUsers.Single(t=>t.Id.Equals(userid.id));

or

db.AspNetUsers.Single(t=>t.Id == userid.id);