【发布时间】:2018-09-13 12:19:48
【问题描述】:
我想从 Angular 5 调用 Web api 中的函数
这是我在 api.service.ts 中的函数:
//it works
public getAllTodos() {
return this.http
.get(API_URL + '/todos/')
.map(response => {
const todos = response.json();
return todos.map((todo) => new Todo(todo));
})
.catch(this.handleError);
}
//it doesn't work
public createTodo(todo: Todo) {
let headers = new Headers({ 'Content-Type': 'application/json' });
//let options = new RequestOptions({ headers: headers });
let payload = JSON.stringify(todo);
return this.http
//.post(API_URL + '/todos/', JSON.stringify(todo), options)
.post(API_URL + '/todos/', payload, {headers: headers})
.map(response => {
return new Todo(response.json());
})
.catch(this.handleError);
}
这是我在 Web Api 中的功能:
[HttpGet]
[Route("todos")]
public HttpResponseMessage GetAllTodos()
{
try
{
List<Todo> todos = manager.GetAll().ToList();
return Request.CreateResponse(HttpStatusCode.OK, todos);
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
}
}
[HttpPost]
[Route("todos")]
public HttpResponseMessage CreateTodo([FromBody] Todo todo)
{
try
{
Todo td = new Todo() { title = todo.title, complete = todo.complete };
int id = manager.CreateTodo(td);
return Request.CreateResponse(HttpStatusCode.OK, id);
}
catch (Exception ex)
{
return Request.CreateErrorResponse(HttpStatusCode.InternalServerError, ex.Message);
}
}
我在 Web API 中设置了一个断点,但它没有收到来自 Angular 客户端的任何调用。但是,它适用于 'get' 方法。
请告诉我为什么函数'post'不起作用以及解决它的解决方案。
我附上下面的图片。
谢谢!
【问题讨论】:
-
您是否检查了开发者的工具和网络选项卡?
-
@brk 即使我在 Chrome 中设置断点并运行,也没有请求在网络选项卡中“发布”功能。
-
你是怎么调用
createTodo函数的? -
和上面代码中的'get'方法一样
-
1) 您的网络选项卡在 devtools 中显示什么? 2)你在WebApi端启用了CORS吗?
标签: javascript angular asp.net-web-api