我想獲得一個postJ方法與angularJS 2 http一起工作。角2 http方法失敗
我的REST調用如下:
saveCourse(Course: any) {
let url ='https://server/CoursesWebApi/api/courses/insert';
let headers = new Headers();
headers.append('Content-Type', 'application/json');
headers.append('Accept', 'application/json');
let options = new RequestOptions({ headers: headers});
return this._http.post(url, { data: Course }, options)
.toPromise()
.then(res => res.json().data)
.catch((err: any) => {
console.log(err);
return Promise.reject(err);
});
}
課程對象,字符串化的時候,看起來是這樣的:
「{」 標題 「:」 測試題」, 「AUTHORID」: 「斯科特 - 阿倫」, 「類別」: 「軟件 建築」, 「CourseLength」: 「2」, 「CourseId」: 「測試ID」}」
我曾經嘗試都將字符串和非串化版本。當我在鉻調試,我得到兩個版本的以下錯誤:
與狀態響應:0網址:空
據我瞭解,狀態0(零)意味着它甚至從未將其發佈到webapi服務器。我啓用了CORS,我在樣本reactJS應用程序中使用了類似的方法,使用axios並調用相同的webapi,並且它可以工作。我安裝了失眠JSON工具,並使用以下JSON格式執行後,它的工作:
{ 「CourseId」:「史蒂夫」, 「的AuthorID」:「科裏 - 房子」, 「標題」 : 「測試題」, 「CourseLength」: 「12:40」, 「類別」: 「測試分類」}
我不知道我做錯了。我的asp.net的WebAPI看起來是這樣的:
[HttpPost]
[Route("CoursesWebApi/api/courses/insert/")]
public IActionResult PostCourse([FromBody] Course course)
{
if (!ModelState.IsValid)
{
return HttpBadRequest(ModelState);
}
_context.Course.Add(course);
try
{
_context.SaveChanges();
}
catch (DbUpdateException)
{
if (CourseExists(course.CourseId))
{
return new HttpStatusCodeResult(StatusCodes.Status409Conflict);
}
else
{
throw;
}
}
return Ok();
}
最後,當我使用Fiddler我看到在網頁API以下錯誤:
HTTP/1.1 400錯誤的請求內容類型:應用程序/ JSON; charset = utf-8 服務器:Kestrel X-Powered-By:ASP.NET Access-Control-Allow-Origin:* 訪問控制允許標題:Content-Type,Accept,X-Requested-With, X -File-Name訪問控制 - 允許 - 方法:GET,POST Date:Sun,01 Jan 2017 16:15:15 GMT內容長度:37
{「」:[「不支持的內容類型''。 「]}
我已經嘗試了許多不同的post方法配置,無濟於事。一直在這工作三天,所以任何幫助表示讚賞。
編輯 我無法解決問題。我的web api使用了新的asp.net核心和EF 7.我使用EF 6和ASP.Net 4.5.2重寫了它,並且它工作正常。我懷疑在我的web api中丟失了一些導致問題的東西。
字符串化的數據'VAR體= JSON.stringify(場)''發送之前_http.post(URL,身體,期權)',檢查以確保API能處理預期的內容類型。同時刪除'[FromBody]'屬性。它被用來從複雜對象 – Nkosi