Я пытаюсь запрограммировать веб-приложение. 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, что может вызвать проблему