需要一些帮助来构建 asp.net 核心 webapi 中的 [HttpPost] 部分

Posted

技术标签:

【中文标题】需要一些帮助来构建 asp.net 核心 webapi 中的 [HttpPost] 部分【英文标题】:Need some help to build [HttpPost] section in asp.net core webapi 【发布时间】:2021-06-25 18:24:41 【问题描述】:

我正在学习如何创建 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.AddStudents();

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

上线:return await postStu;

错误 CS0029 无法将类型“void”隐式转换为“Microsoft.AspNetCore.Mvc.ActionResult

【问题讨论】:

你得到什么样的错误? 您好!控制器上的错误:.AddStudents“没有参数给出对应于'MethodStudents.AddStudents(TdStudents)'的所需形式参数'student'返回等待postStu;不能将类型'void'隐式转换为'microsoft.aspnetcore.mvc.action .结果...' 嗨@cshapoor,正如Gunnarhawk 所说,您需要将TbStudents 实例传递给AddStudents 方法。此外,您无法设置变量postStu,因为AddStudents 方法不返回任何数据. 【参考方案1】:

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

【讨论】:

谢谢,我正在尝试这样做!抱歉,打错了,我编辑了帖子。

以上是关于需要一些帮助来构建 asp.net 核心 webapi 中的 [HttpPost] 部分的主要内容,如果未能解决你的问题,请参考以下文章

重定向到 ASP.net 核心中的 url

在 asp.net C# 中动态创建/复制的 Div

用 Visual Studio 和 ASP.NET Core MVC 创建首个 Web API

如何一秒钟从头构建一个 ASP.NET Core 中间件

在 asp.net 核心的构建后事件中运行 dotnet publish

ASP.NET 帮助(使用公共 Web 服务)