Основное приложение Angular и .Net httpPost отправляет нулевой объект - PullRequest
1 голос
/ 28 июня 2019

Как видно из названия, у меня есть угловое приложение, которое взаимодействует с сервером .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; }
}

Теперь, когда API вызывается с использованием POST из angular, для добавления в базу данных переменная addStudent для некоторой причины пуста.Призыв к действию определенно работает, потому что я получаю «ложный» ответ на стороне клиента от части «catch (Exception e)» сервера.System.ArgumentNullException: Value cannot be null. Это то, что я видел на консоли.

Есть мысли о том, почему сервер не может получить объект?Спасибо!

ОБНОВЛЕНИЕ 1

В моем приложении есть несколько других вызовов POST с другими моделями, и, что удивительно, все они работают нормально, кроме этой.

ОБНОВЛЕНИЕ 2

При дальнейшем копании в бэкэнд я обнаружил несколько интересных моментов.Для начала я установил точку останова в начале функции в контроллере, и я заметил, что вся переменная addStudent буквально установлена ​​на нуль, не отдельные элементы класса в переменной, а переменная в целомустановите в null.

Так же, как тест, я удалил часть [FromBody] следующим образом:

public IActionResult addStudents(Student addStudent)

и теперь, когда я запускаю приложение с точкой останова и просматривалВ переменной addStudent отображаются все элементы класса, но значения всех элементов равны нулю или 0 в зависимости от типа переменной.

1 Ответ

0 голосов
/ 28 июня 2019

Выполнить отладку, чтобы увидеть, какое значение равно NULL, является ли addStudent NULL или одно из свойств равно NULL?

Такое ощущение, что это происходит из-за того, что среда не может создать экземпляр объекта Student на основетело сообщения.

Посмотрите на стороне клиента, чтобы увидеть точные данные, которые публикуются, и проверьте на стороне сервера, как выглядит addStudent

FYI

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...