API возвращает ошибку при использовании PUT и POST, удаление работает, я боюсь, что это проблема синтаксиса - PullRequest
0 голосов
/ 03 августа 2020

Я пытаюсь запрограммировать веб-приложение. net CRUD, используя. net и angular. У меня возникают проблемы с тем, чтобы некоторые из моих методов API работали, удаление и получение данных из базы данных работают нормально, но мои методы PUT, POST и возвращение этой ошибки.

POST http://localhost: 5000 / api / Employee [HTTP / 1.1 400 Bad Request 7ms]

Ниже мой контроллер

[HttpGet]
public IEnumerable<Employee> Get()
{
    var data = eDetails.Employee.ToList();
    return data;
}

[HttpPost]
public IActionResult Post([FromBody] Employee obj)
{
    var data = eDetails.Employee.Add(obj);
    eDetails.SaveChanges();
    return Ok();
}

[HttpPut("{id}")]
public IActionResult Put(int id, [FromBody] Employee obj)
{
    var data = eDetails.Employee.Update(obj);
    eDetails.SaveChanges();
    return Ok();
}

[HttpDelete("{id}")]
public IActionResult Delete(int id)
{
    var data = eDetails.Employee.Where(a => a.eId == id).FirstOrDefault();
    eDetails.Employee.Remove(data);
    eDetails.SaveChanges();
    return Ok();

}

Это мой angular компонент приложения, какие-нибудь идеи?

import { Component } from '@angular/core';  
import {ServiceService} from './service.service';  
import { FormGroup, FormControl,Validators } from '@angular/forms';   
@Component({  
  selector: 'app-root',  
  templateUrl: './app.component.html',  
  styleUrls: ['./app.component.css']  
})  
export class AppComponent {  
  title = 'EmployeeFE';  
     
  constructor(private ServiceService: ServiceService) { }  
  data: any;  
  EmpForm: FormGroup;  
  submitted = false;   
  EventValue: any = "Save";  
  
  ngOnInit(): void {  
    this.getdata();  
  
    this.EmpForm = new FormGroup({  
      eId: new FormControl(null),  
      eName: new FormControl("",[Validators.required]),        
      eAddress: new FormControl("",[Validators.required]),  
      eEmail:new FormControl("",[Validators.required]),  
      eAge: new FormControl("",[Validators.required]),  
    })    
  }  
  getdata() {  
    this.ServiceService.getData().subscribe((data: any[]) => {  
      this.data = data;  
    })  
  }  
  deleteData(id) {  
    this.ServiceService.deleteData(id).subscribe((data: any[]) => {  
      this.data = data;  
      this.getdata();  
    })  
  }  
  Save() {   
    this.submitted = true;  
    
     if (this.EmpForm.invalid) {  
            return;  
     }  
    this.ServiceService.postData(this.EmpForm.value).subscribe((data: any[]) => {  
      this.data = data;  
      this.resetFrom();  
  
    })  
  }  
  Update() {   
    this.submitted = true;  
    
    if (this.EmpForm.invalid) {  
     return;  
    }        
    this.ServiceService.putData(this.EmpForm.value).subscribe((data: any[]) => {  
      this.data = data;  
      this.resetFrom();  
    })  
  }  
  
  EditData(Data) {  
    this.EmpForm.controls["eId"].setValue(Data.eId);  
    this.EmpForm.controls["eName"].setValue(Data.eName);      
    this.EmpForm.controls["eAddress"].setValue(Data.eAddress);  
    this.EmpForm.controls["eEmail"].setValue(Data.eEmail);  
    this.EmpForm.controls["eAge"].setValue(Data.eAge);  
    this.EventValue = "Update";  
  }  
  
  resetFrom()  
  {     
    this.getdata();  
    this.EmpForm.reset();  
    this.EventValue = "Save";  
    this.submitted = false;   
  }  
} 

Таблица в БД

CREATE TABLE Employee (
    eId INT NOT NULL IDENTITY PRIMARY KEY ,
    eName VARCHAR(30),
    eAddress VARCHAR(30),
    eEmail VARCHAR(30),
    eAge INT
); 

My Service.Service class

import { Injectable } from '@angular/core';
import { HttpClient,HttpHeaders }    from '@angular/common/http';  
@Injectable({
  providedIn: 'root'
})
export class ServiceService {

  constructor(private http: HttpClient) { }
    httpOptions = {
      headers: new HttpHeaders({
        'Content-Type': 'application/json'
      })
    }
    getData(){
      return this.http.get('/api/Employee');
    }
    postData(formData)
    {
      return this.http.post('/api/Employee', formData)
    }
    putData(id,formData){
      return this.http.put('/api/Employee/'+id,formData);
    }
    deleteData(id)
    {
      return this.http.delete('/api/Employee/'+id);
    }
}
using System;
using System.ComponentModel.DataAnnotations;

namespace WorkProject.Models
{
    public class Employee
    {
        [Key]
        public int? eId { get; set; }
        public string eName { get; set; }
        public string eAddress { get; set; }
        public string eEmail { get; set; }
        public int eAge { get; set; }
    }
}

Еще одна странная вещь, которую я заметил: когда я пытаюсь выполнить PUT и редактировать данные, это работает, только если я не редактирую параметр возраста, потому что AGE отправляется как строка, следует ли мне изменить возраст на VARCHAR в моей таблице и проверить, что это число во внешнем интерфейсе?

Похоже, что eId отправляется как null, что может вызвать проблему

...