【发布时间】:2017-06-07 09:06:35
【问题描述】:
我正在尝试创建在博客上发布 cmets 的基本功能,使用 Angular2 向我的 API 发出 POST 请求时出现以下错误:
Error in comment.service: Response with status: 0 for URL: null
表单提交按钮调用我的评论组件comment-form.component.ts
onSubmit() {
this.submitted = true;
//TODO: replace hardcoded with form fields
this.newComment = new CommentInputViewModel("temp", 0, 0, true, "null", 0);
this.newComment.text = this.model.text;
this.newComment.ownerID = 6;
this.newComment.parentID = 1305;
this.newComment.score = 0.5;
this.newComment.isFact = true;
this.newComment.sideID = 1073;
this.newComment.sideText = "For";
this._postService.postNewComment(this.newComment)
.subscribe(comment => this.returnedComment = comment,
error => this.errorMessage = <any>error);
console.log("commentList.component - After onSubmit:" + this.returnedComment);
return JSON.stringify(this.model);
}
将我的服务调用到 API:
postNewComment(newComment: IComment): Observable<IComment>{
let _body = JSON.stringify(newComment);
let _headers = new Headers();
_headers.append( 'Content-Type', 'application/json' );
let _options = new RequestOptions({ headers: _headers });
return this._http.post(this._postNewCommentUrl, _body, _options)
.map((res:Response) => res.json().value)
.catch(this.handleError);
}
API 端的结果,来自 VS2015 调试器是 204 错误(无内容):
]1
我尝试过的:
大部分排除了 COR 问题。这里的大多数其他 Angular2 POST 问题都是 COR 问题。由于该请求正在访问我的 Visual Studio 调试器并返回 204,因此我认为不是这样。另外,我的 CORE startup.cs 将“builder.AllowAnyOrigin(); 作为一项政策。
从同一服务到同一 API 的 GET 命令可以正常工作。我可以读取我之前在 API 端创建的 cmets。
-
使用 POSTMAN 拦截呼叫会产生以下结果:
如果我通过将“文本”更改为 json 并粘贴到模型中来修改 POSTMAN 请求,它可以正常工作。它命中 API 的“Post”方法并返回 200,以及 json 文本“true”。见下文。
似乎没有传输正文和标头。在调试器中,两者都被传递给后端 Angular2 代码:
如下所示,这里是开发工具的屏幕截图。显示的内容与 POSTMAN 几乎相同。
【问题讨论】:
-
你应该得到一个 OPTIONS 调用后跟一个 POST。 204 不是错误;这意味着服务器没有内容要发回,而不是传入的请求没有内容。如果请求格式不正确,您会收到 4xx 错误。
-
同意,尽管服务器正在发送 204,因为 angular2 POST 不起作用。当它确实工作时(使用 POSTMAN),它返回 json 'true' 和 200。我在上面修改了我的问题,以显示 Visual Studio 中的控制器方法,该方法在 POSTMAN 发送帖子时受到打击,反之,当我的 angular2 方法发出时。
-
您是否尝试调试 ASP.NET Core 应用程序以查看那里是否发生了任何事情?此外,您是否测试过是否可以从浏览器上下文(未完成 CORS)外部调用该服务?您看到的 OPTIONS 请求是预期的;缺少的是后续 POST 请求(然后将包含您的数据)。我看到您使用的是 Firefox,您可以在 Chrome 中尝试一下吗? Chrome 通常会显示有关失败的 CORS 请求的更多信息。
-
Poke - 上面的第一个和第四个屏幕截图来自 ASP.NET CORE 端,我在 VS2015 中运行我的 API,在 VS Code 中运行 Angular2 端。我一直在 VS Code 中使用 Chrome 调试器,但最好单独使用 Chrome 并查看控制台显示的内容。我会查看它,看看它是否比 Chrome 调试器提供了更好的指示。
标签: angular asp.net-core