2017-12-03 1 views
1

フルスタックアプリケーションをビルドしていますが、ボタンクリックで個々のオブジェクト(データベースの質問)を削除できるようになりました。バックエンドの私のAPIは、私がpostman経由でテストするときにこの目的のために働きます:200 OKを返し、レコードが有効に削除されたことを確認します。しかし、これは私のフロントエンドを通して同じ行動を試みるときには機能しません。ASP.NETコア:角度4のPOSTリクエストでレコードを削除すると404が見つかりません

バックエンドAPI:

[Route("api/removeQuestion")] 
    [HttpPost] 
    public IActionResult RemoveQuestion(int questionId) 
    { 
     Question question = _context.Questions.SingleOrDefault(q => q.QuestionId == questionId); 

     if (question == null) 
     { 
      return NotFound(); 
     } 
     else 
     { 
      _context.Questions.Remove(question); 
      _context.SaveChanges(); 
      return Ok(); 
     } 
    } 

フロントエンドAPI:

removeQuestion(questionId:number) { 
var url = "http://localhost:57222/api/removeQuestion"; 
console.log("id is: " + questionId); 
return this.http.post(url, questionId).map(
    res => <Question>res.json()[0], 
    err => console.log(err)  
);  

}私はAPI呼び出し

removeQuestion(id:number){ 
this.api.removeQuestion(id).subscribe(
    res => { 
    this.question = res; 
    }, 
    error => this.errorMessage = <any>error 
); 

を}

あなたは私が本当に必要としていない間に応答をマッピングしていることに気付くでしょう。

私が問題を理解している限り、SingleOrDefaultでid値に基づいて適切なオブジェクトを見つけ出すことができず、したがってデフォルト値null(?)に戻っていません。しかし、APIが呼び出される直前にIDが正しくコンソールに記録され、郵便配達員との手動投稿を送信すると機能します。

+0

はところで – DrNio

+0

私もそう思ったが、私は、Microsoftのヘルプページについての研究をしたとき、彼らはあまりにもPOSTと削除を行います。 https://docs.microsoft.com/en-us/aspnet/core/data/ef-mvc/crud – Gravi

+0

ok、クールな感謝! – DrNio

答えて

0

は[FromBody]を追加してみ

return this.http.post(url, {questionId:questionId}).map(
    res => <Question>res.json()[0], 
    err => console.log(err)  
); 

https://angular.io/guide/http

+0

残念なことに、この方法では不運です。まだ私を404ing私 – Gravi

0

、これを試してみてください:

public IActionResult RemoveQuestion([FromBody]int questionId) 
0

私は友人からの助けがあったが、彼は原因を見つけました。

私のバックエンドのAPIメソッドは、受け取ったものを逆シリアル化しようとし続けました。明らかに整数では不可能でした。

質問オブジェクト全体を渡すように機能が変更されました。

新しいコード:

[Route("api/removeQuestion")] 
    [HttpPost] 
    public IActionResult RemoveQuestion([FromBody] Question question) 
    { 

     if (question == null) 
     { 
      return NotFound(); 
     } 
     else 
     { 
      _context.Questions.Remove(question); 
      _context.SaveChanges(); 
      return Ok(); 
     } 
    } 

、オブジェクトが渡されるように調整フロントエンド。

removeQuestion(question:Question) { 
var url = "http://localhost:57222/api/removeQuestion"; 
return this.http.post(url,question).map(
    res => <Question>res.json()[0], 
    err => console.log(err)  
);  

}

あなたはDELETE` `に` POST`を変更したい場合があります
関連する問題