J'essaie d'accéder à une API wep avec angular 4 post.
Dans mon service, j'ai ajouté le type de contenu d'application/json. Et je convertis l'objet en json tout en envoyant des données à l'api. J'utilise HttpClientModule
import { Injectable } from '@angular/core';
import { HttpClient } from '@angular/common/http';
@Injectable()
export class NewServiceService {
baseUrl = "http://localhost:33969/api/";
headers = { headers: new Headers({ 'Content-Type': 'application/json' })
};
obj= {
name:"A",
cgpa: 3
};
_http:any;
constructor(http: HttpClient) {
this._http = http;
}
SaveStudents(){
this._http
.post(
this.baseUrl + 'home/Save',
JSON.stringify(this.obj),
this.headers
)
.subscribe(
res => {
alert("Student Saved!");
},
err => {
alert("Error!");
}
);
}}
Dans l'API,
using Entity;
using Microsoft.AspNetCore.Mvc;
using Repo;
namespace API_Core.Controllers
{
[Produces("application/json")]
[Route("api/[controller]/[action]")]
public class HomeController : Controller
{
IStudent _student;
public HomeController(IStudent student)
{
_student = student;
}
[HttpPost]
public Student Save([FromBody]Student s)
{
return _student.Save(s);
}
}
}
ici, je veux attraper l'objet en tant que modèle étudiant et faire quelque chose avec les données. Voici le modèle étudiant
public class Student
{
[Key]
public int ID { get; set; }
public string Name { get; set; }
public double Cgpa { get; set; }
}
Mais en utilisant prostman, j'ai pu recevoir l'objet avec succès .
[~ # ~] mise à jour [~ # ~] en utilisant HttpHeaders au lieu d'en-têtes et CORS a résolu le problème
Activation de CORS pour ASP.NET Core 2 =>
Dans ConfigureServices:
services.AddCors(options => options.AddPolicy("Cors", builder =>
{
builder
.AllowAnyOrigin()
.AllowAnyMethod()
.AllowAnyHeader();
}));
Dans Configure (au-dessus de usemvc ()):
app.UseCors("Cors");
Vous devez changer la ligne ci-dessous
headers = { headers: new Headers({ 'Content-Type': 'application/json' })
};
à
headers={
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
}
Dans mon cas, l'erreur 415 a été causée parce que j'appelais JSON.stringify(obj)
alors que cela n'était pas nécessaire. J'ai lu quelque part que la méthode post va stringifier le paramètre du corps selon les besoins
Donc instinct de ceci:
this._http
.post(
this.baseUrl + 'home/Save',
JSON.stringify(this.obj),
this.headers
)
Je l'ai changé en ceci:
this._http
.post(
this.baseUrl + 'home/Save',
this.obj, // << no need to stringify
this.headers
)
Voici mon code de travail réel
@Injectable()
export class ParkingService {
constructor(private http: HttpClient) { }
create(parking: Parking) {
const requestUrl = environment.apiUrl + 'parking' ;
const headerOptions = new HttpHeaders();
headerOptions.set('Content-Type', 'application/json');
return this.http.post(requestUrl, parking, {headers: headerOptions}) ;
}
}
Cela m'est arrivé même après avoir activé et configuré CORS sur l'API Web .NET Core
J'ai eu le même problème en utilisant angular 6 avec .netcore 2. Mon code était le suivant:
Angulaire:
getCustomers(pageSize: number, pageNumber: number) {
let fromObject = {
name: this.searchName,
pageNumber: pageNumber.toString(),
pageSize: pageSize.toString()
}
const params = new HttpParams({
fromObject: fromObject
});
return this.http.get(this.baseUrl, { params: params });
}
.Net Core
[HttpGet]
public IActionResult GetCustomers(PageSelection page)
Le problème a été résolu de deux manières différentes.
Premier:
[HttpGet]
public IActionResult GetCustomers(string Name, int PageSize, int PageNumber)
Deuxième, bien que j'aie ajouté [ApiController]
[HttpGet]
public IActionResult GetCustomers([FromQuery]PageSelection page)
J'espère que cela aide.