首页 > 解决方案 > 需要一些帮助来构建 asp.net 核心 webapi 中的 [HttpPost] 部分

问题描述

我正在学习如何创建 webapi,我需要一些帮助。我在构建后控制器时遇到问题!我无法使其直接在我创建的将值添加到数据库的方法中工作。我在搜索的内容、文档等方面找不到任何帮助……有什么建议吗?

班级型号:

public class TbStudents
{
    public int StuId { get; set; }
    public string StuName { get; set; }
    public string StuDegree { get; set; }
}

上课方法:

邮政

public class MethodStudents
 {

//GET Method

public async Task<List<TbStudents>> GetReadStudents()
        {
            List<TbStudents> list = new List<TbStudents>();
            using (NpgsqlConnection myConn = new NpgsqlConnection(Conns.ConnStudents))
            {
                string sql = "SELECT * FROM students ORDER BY stu_name";
                NpgsqlCommand myQuery = new NpgsqlCommand(sql, myConn);
                myConn.Open();

                NpgsqlDataReader myReader = await myQuery.ExecuteReaderAsync();

                while (myReader.Read())
                {
                    TbStudents data = new TbStudents
                    {
                        StuId = int.Parse(myReader["stu_id"].ToString()),
                        StuName = myReader["stu_name"].ToString(),
                        StuDegree = myReader["stu_degree"].ToString(),
                    };
                    list.Add(data);
                }
                myConn.Dispose();
            }
            return list;
        }


//POST Method

public async Task addStudent(TbStudents student) {
    using(NpgsqlConnection myConn = new NpgsqlConnection(Conns.ConnStudents)) {
        string sql = "INSERT INTO students (stu_name, stu_degree)" +
            "VALUES (@name, @degree)";
    
        NpgsqlCommand myQuery = new NpgsqlCommand(sql, myConn);
    
        myQuery.Parameters.AddWithValue("@name", students.StuName);
        myQuery.Parameters.AddWithValue("@degree", students.StuDegree);
    
        myConn.Open();
        await myQuery.ExecuteNonQueryAsync();
        myConn.Dispose();
    }
 }
}

类控制器:

{
    [Route("api/[controller]")]
    [ApiController]
    public class StudentsController : ControllerBase
    {
        MethodStudents methodStudents = new methodStudents();

        // GET: api/students
        [HttpGet]
        public async Task<ActionResult<List<TbStudents>>> GetStudents()
        {
            var list = methodStudents.GetReadStudents();

            return await list;
        }

        //Post: api/students
        [HttpPost]
        public async Task<ActionResult<TbStudents>> PostStudents()
        {          
            var postStu = methodStudents.AddStudents();

            return await postStu;

        }

    }
}

控制器 [HttpPost] 让我遇到了一些错误......

上线:var postStu = methodStudents。添加学生();

错误 CS7036 没有给出与“MethodStudents.AddStudent(TbStudents)”所需的形参“student”相对应的参数

上线:返回await postStu

错误 CS0029 无法将类型“void”隐式转换为“Microsoft.AspNetCore.Mvc.ActionResult<TestApiStudents.Data.Models.TbStudents>”

标签: c#postgresqlasp.net-core-webapiwebapirest

解决方案


AddStudent()当您调用它时,您需要将一个值传递给该方法,var postStu = AddStudent();因为您正在使用参数定义该方法。另外,我不确定这是否是错字,但在您的PostStudents()方法中,您正在调用.AddStudents(),您应该删除点 '。


推荐阅读