c# - 如何在 VS 2017 中设置 Angular 7 与 net core web api 进行通信
问题描述
我搜索了高和低以获得良好的响应。我要解决的问题是...我有一个 VS 2017(社区)项目,该项目有一个 Angular 7 应用程序和一个网络核心 web api 后端都在同一个项目中。我可以使用 Postman 成功测试 API,以便向/从数据库发布和获取一些简单的数据。但是,当我尝试使用 Angular 前端来做同样的事情时,我得到一个 ERRCONNREFUSED 错误。
经过几次相互冲突/令人沮丧的网络搜索以找到一个简单的答案后,我开始尝试使用 proxy.config.json 文件。
proxy.config.json
{
"/api": {
"target": "http://localhost:8888",
"secure": false
}
}
我通过 npm start 启动 Angular 应用程序,它按预期在端口 4200 中启动。
我启动 dotnet run 并且它也成功运行。
启动.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");
}
});
包.json
{
"name": "client-app",
"version": "0.0.0",
"scripts": {
"ng": "ng",
"start": "ng serve --proxy-config proxy.config.json",
...}
我得到的错误如下:
尝试将请求 /api/clients 从 localhost:4200 代理到 localhost:8888 (ERRCONNREFUSED) 时发生错误。
我觉得有一些简单的东西我只是忽略了。
解决方案
Proxy.config.json(从未见过)感觉它旨在让您的后端 nodejs 服务器将请求发送到另一个 Web 服务器,因此它应该指定另一个服务器。您似乎已声明此服务在您的本地主机上的 8888 上运行,但显然不是..
Web 浏览器脚本安全模型通常围绕客户端页面脚本编写,该脚本只能与页面来源的服务器进行通信。因此,如果您在http://myapi.myhost.com(生产中)有一个 api,并且您在本地机器上设置了 Angular 应用程序,那么页面来自本地机器,只能与服务器通信在本地机器上,因此 localhost:4200 的服务器(可能是 nodejs)必须代表页面将请求代理到 myapi.myhost.com。
作为替代(更好)选项,您可以配置事物,以便可以从您的前端应用程序访问 api(不同的主机/端口),即使托管 api 的服务器没有为您的应用程序提供服务
你说你在邮递员中有一个工作请求,大概该请求的目标是运行 api 的 Web 服务器,所以配置代理,使其成为目标,而不是 localhost:8888 (如果你发布它真的有助于我们的调试工作邮递员请求,即使是邮递员正在点击的网址的屏幕截图也会有所帮助)
如果 api 确实在 8888 上运行,并且您想通过代理而不是 CORS 来解决这个问题,我们还有更多工作要做,以找出它没有连接的原因
推荐阅读
- python - 解压文件时出现“错误0x80070057:参数不正确”
- c# - Changing the player's position in Update() or FixedUpdate() method?
- python - 如何在不进入网页的情况下单击网页按钮
- python-3.x - 如何根据其他单词的存在从字符串中提取某些单词?
- reactjs - 如何使胜利原生光标容器x和y轴线只与图形上的点相交而不与触摸点相交
- sql - LINQ to Entities 返回空列表,但它的 SQL 等效返回结果
- bash - 查找单行文件并将它们移动到子文件夹
- javascript - 内联事件处理程序中的作用域名称是如何创建的?这个机制在哪里记录?
- camel-http - Restlet 错误:“无法运行以下服务器端任务:sun.net.httpserver.ServerImpl$Exchange@56d26222”
- node.js - 如何在同一个 handler.js 文件中调用另一个 AWS 函数?并附加查询字符串参数?