Angular和.Net核心应用程序httpPost发送空对象

时间:2019-06-28 01:17:39

标签: angular typescript .net-core http-post

就像标题中所说的那样,我有一个与.Net服务器通信的角度应用程序,并且httpPost存在问题。在我进一步说明之前,这里是代码:

组件:

async addStudent() {
    this.studentData = await this.studentService.addStudent(this.newStudentData).toPromise();
}

服务:

addStudent(studentNew: Student): Observable<Student[]> {
    return this.http.post<Student[]>(this.baseUrl + 'api/Student/addStudents', studentNew, httpOptions)
    .pipe(catchError(this.handleErrorNew.bind(this)));

httpOptions:

const httpOptions = {
  headers: new HttpHeaders({
    'Content-Type': 'application/json; charset=utf-8'
  })
};

控制器:

[HttpPost("[action]")]
public IActionResult addStudents([FromBody]Student addStudent)
{
    try
    {
        using (var dbObj= new dataBase())
        {
            dbObj.Add<Student>(addStudent);
            dbObj.SaveChanges();
            var students= new List<Student>();
            try{
                students= dbObj.studentsTable.ToList();
            } catch (Exception e) {
                Console.WriteLine(e);
            }
            return Json(students);
        }
    }
    catch (Exception e)
    {
        Console.WriteLine(e);
        return Json(false);
     }
}

型号:

public class Student
{
    public int studentId { get; set; }
    public int studentNum { get; set; }
    public int sectionNum { get; set; }
    public string country { get; set; }
    public string state { get; set; }
    public string city { get; set; }
    public long dateJoined { get; set; }
    public long dateGraduated { get; set; }
}

现在,每当使用POST从角度调用API并将其添加到数据库时,变量addStudent就一定是空的。 对该操作的调用绝对有效,因为我从服务器的“ catch(Exception e)”部分在客户端获得了“ false”响应。 System.ArgumentNullException: Value cannot be null. 这就是我在控制台上看到的。

关于服务器为何无法接收对象的任何想法?谢谢!

更新1

在我的应用程序中,其他模型还进行了一些其他的POST调用,令人惊讶的是,除了该模型以外,其他所有调用都工作正常。

更新2

通过进一步研究后端,我发现了一些有趣的观点。 首先,我在控制器中函数的开始处设置了一个断点,并且我注意到整个变量addStudent实际上是设置为null,而不是变量中的各个类项,而是整个变量设置为null。

作为测试,我然后删除了[FromBody]部分,如下所示:

public IActionResult addStudents(Student addStudent)

现在,当我使用断点运行应用程序并查看变量addStudent时,将显示所有类项目,但所有项目的值均为null或0(取决于变量的类型)。

1 个答案:

答案 0 :(得分:0)

进行调试以查看哪个值是NULL,是addStudent是NULL还是属性之一是NULL?

感觉像是因为该框架无法基于帖子主体创建Student对象的实例。

看看客户端以查看发布的确切数据,并检查服务器端以了解addStudent的外观

仅供参考

https://docs.microsoft.com/en-us/aspnet/core/mvc/models/model-binding?view=aspnetcore-2.2#input-formatters