web-dev-qa-db-ja.com

415(サポートされていないメディアタイプ)angular 4 Post

angular 4 postメソッドでwep apiにアクセスしようとしています。

私のサービスでは、content-typeのapplication/jsonを追加しました。そして、APIにデータを送信するときにオブジェクトをJSONに変換しています。 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!");
    }
  );
}}

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);
    }
}
}

ここでは、オブジェクトをスチューデントモデルとしてキャッチし、データを処理します。こちらが学生モデルです

public class Student
{
    [Key]
    public int ID { get; set; }

    public string Name { get; set; }

    public double Cgpa { get; set; }
}

しかし、プロストマンを使用すると、オブジェクトを正常に受け取ることができました。 enter image description here

[〜#〜] update [〜#〜]ヘッダーとCORSの代わりにHttpHeadersを使用して問題を解決しました

ASP.NET Core 2のCORSを有効にする=>

ConfigureServicesで:

services.AddCors(options => options.AddPolicy("Cors", builder =>
        {
            builder
            .AllowAnyOrigin()
            .AllowAnyMethod()
            .AllowAnyHeader();
        }));

Configure(Ause上記usemvc()):

app.UseCors("Cors");
6
Jaowat Raihan

以下の行を変更する必要があります

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

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

私の場合、必要がなかったときにJSON.stringify(obj)を呼び出していたため、415エラーが発生しました。 postメソッドが必要に応じてbodyパラメーターを文字列化することをどこかで読んだ

だからこれを主張:

this._http
.post(
    this.baseUrl + 'home/Save', 
    JSON.stringify(this.obj),
    this.headers
 )

これに変更しました:

 this._http
.post(
    this.baseUrl + 'home/Save', 
    this.obj, // << no need to stringify 
    this.headers
 )

ここに私の実際の作業コードがあります

@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}) ;
  }
}

これは、.NETコアWeb APIでCORSを有効にして構成した後でも起こりました

.netcore 2でangular 6を使用しても同じ問題が発生しました。私のコードは次のとおりです。

角度:

  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)

この問題は2つの異なる方法で解決されました。

最初の1つ:

[HttpGet]
public IActionResult GetCustomers(string Name, int PageSize, int PageNumber)

2つ目は、[ApiController]を追加しましたが

[HttpGet]
public IActionResult GetCustomers([FromQuery]PageSelection page)

それが役に立てば幸い。

0
tenten