web-dev-qa-db-fra.com

415 (Type de support non pris en charge) angular 4 Post

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 . enter image description here

[~ # ~] 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");
6
Jaowat Raihan

Vous devez changer la ligne ci-dessous

  headers = { headers: new Headers({ 'Content-Type': 'application/json' }) 
      };

à

headers={
    headers: new HttpHeaders({
        'Content-Type': 'application/json'
    })
}
6
Thangadurai

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.

0
tenten