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; }
}
しかし、プロストマンを使用すると、オブジェクトを正常に受け取ることができました。
[〜#〜] 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");
以下の行を変更する必要があります
headers = { headers: new Headers({ 'Content-Type': 'application/json' })
};
に
headers={
headers: new HttpHeaders({
'Content-Type': 'application/json'
})
}
私の場合、必要がなかったときに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)
それが役に立てば幸い。