我到处寻找一个好的答案。我想要解决的问题是.我有一个VS 2017 (社区)项目,它有一个带有净核心网络api后端的角锥7应用程序,所有这些都在同一个项目中。我可以使用Postman成功地测试API,并从数据库中获取一些简单的数据。然而,当我试图使用角前端做同样的,我得到一个ERRCONNREFUSED错误。
经过几次相互冲突/令人沮丧的网络搜索,以找到一个简单的答案,我开始尝试一个proxy.config.json文件。
proxy.config.json
{
"/api": {
"target": "http://localhost:8888",
"secure": false
}
}
我启动的角度应用程序通过npm和它启动端口4200如预期。
我启动了dotnet,它也成功运行了。
Startup.cs
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller}/{action=Index}/{id?}");
});
app.UseSpa(spa =>
{
spa.Options.SourcePath = "ClientApp";
if (env.IsDevelopment())
{
spa.UseAngularCliServer(npmScript: "start");
}
});
package.json
{
"name": "client-app",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.config.json",
...}
我得到的错误如下:
在尝试从localhost:4200到localhost:8888 (ERRCONNREFUSED)代理请求/api/客户端时发生了错误。
我觉得有件简单的事情我只是忽略了。
发布于 2019-01-08 06:18:45
Proxy.config.json (从未见过)感觉它的目的是让您的后端nodejs服务器将请求发送到另一个web服务器,因此它应该指定另一个服务器。您似乎已经声明此服务运行在您的本地主机上的8888上,但显然它不是..
Web浏览器脚本安全模型通常围绕客户端页脚本编写,只能够与来自该页面的服务器进行通信。因此,如果您在http://myapi.myhost.com上有一个api (正在生产中),并且在您的本地机器上设置了您的角应用程序,那么页面来自本地机器,只能与本地机器上的服务器通信,因此本地主机上的服务器:4200(可能是nodejs)必须代表页面代理请求到myapi.myhost.com。
作为另一个(更好的)选项,您可以配置api (不同主机/端口),这样就可以从您的前端应用程序访问api,即使承载api的服务器没有为您的应用提供服务。
您说您在postman中有一个工作请求,该请求的目标可能是运行api的web服务器,因此配置代理,使其成为目标,而不是localhost:8888 (如果您发布工作邮递员请求,即使是url邮递员点击的屏幕截图也会帮助我们调试)。
如果api真的运行在8888上,并且您希望通过代理而不是CORS来解决这个问题,那么我们需要做更多的工作来找出为什么它没有连接。
发布于 2019-01-09 05:27:57
谢谢大家的快速反应。我发现让别人问我问题很有帮助。具体来说,来自IP Kaal的关于CORS的设置。在尝试回复的过程中,我发现我没有在Startup ConfigureServices方法中注册CORS。一旦我这样做,api就像预期的那样与角前端一起工作。再次感谢大家。
https://stackoverflow.com/questions/54085865
复制相似问题