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

本文关键字:目标 webapi 静态方法 | 更新日期: 2023-09-27 18:14:10

我想在控制器中发送一个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)",错误解决;但是我不想使用真实的ID。

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

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);

似乎你的问题在下面一行,可能没有找到用户:

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());

如果t.Id.Equals(2342)工作,那么t.d一定不是字符串,所以你不应该使用.ToString()

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

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

确保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());