ASP.NET Core:使用angular 4 POST请求删除记录时找不到404

时间:2017-12-03 17:04:32

标签: angular asp.net-core-mvc

我正在构建一个全栈应用程序,现在希望能够通过单击按钮删除单个对象(我的数据库中的问题)的功能。当我通过邮递员测试时,后端的我的API可以用于此目的:它返回200 OK,当我检查记录被有效删除时。但是,当通过我的前端尝试相同的操作时,这不起作用。

后端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,并且当我发送带邮递员的手动帖子时,它可以正常工作。

3 个答案:

答案 0 :(得分:0)

试试这个,

 public class Thread1 extends Thread{   
        int s ;
    }
        public class MainThread {
        int y =89;
            public static void main(String[] args)  {
            Thread1 j = new Thread1();
            System.out.println(j.s=43);
            }

        }

https://angular.io/guide/http

答案 1 :(得分:0)

尝试添加[FromBody]:

public IActionResult RemoveQuestion([FromBody]int questionId)

答案 2 :(得分:0)

我得到了朋友的帮助,他找到了原因。

我的后端中的API方法一直试图反序列化它接收的内容,这显然是不可能使用整数。

我已经更改了传递整个Question对象的功能,现在它可以正常工作。

新代码:

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

}