Angular 4 两次调用 WCF REST
Posted
技术标签:
【中文标题】Angular 4 两次调用 WCF REST【英文标题】:Angular 4 calls WCF REST twice 【发布时间】:2019-08-09 00:25:47 【问题描述】:我正在编写一个演示应用程序,它将使用 HTTP 服务发布从我的 Angular 4 应用程序调用 WCF 休息服务。
我可以成功地将我的数据发布到我的服务方法(操作合同)。
但它两次调用我的服务,第二次调用服务方法。
第一次它只是命中Global.asax
文件。
这是 Angular 的 http 帖子的工作原理吗?
以下是服务调用:
以下是操作契约或休息服务方式:
以下是服务实现:
下面是Global.asax
代码:
这个 Global.asax 代码被命中两次,我不明白为什么?
以下是 Chrome 开发工具栏网络选项卡的详细信息,它调用 WCF 休息两次。
Fallowing 是 chrome 网络请求和响应: 第一次调用是“选项”调用:
第二次通话是后期通话:
【问题讨论】:
请在此处分享您的代码,而不是分享屏幕截图/图像。例如,在我的国家 imgur.com 是被禁止的(不要问为什么 :))而且我看不到图片中的内容。当然,人们不能搜索图片中的文字,对吧? 您似乎在使用 CORS。那么您能否确认(通过查看 chrome 开发工具网络选项卡或其他方式)第一次调用不是 OPTIONS 调用? developer.mozilla.org/en-US/docs/Web/HTTP/Methods/OPTIONS 【参考方案1】:正如 Ethan 已经说过的:您正在使用 CORS。因此,网络浏览器首先使用 OPTIONS 请求调用端点。
但是这不会调用 Rest-API 两次(您可以使用后端日志记录或仅在后端中的断点进行检查)。 我认为您的前端在开发模式下运行(您可以在浏览器日志中检查这一点 -> 如果它在开发模式下运行,角度会创建一个日志条目)。
在开发模式下,角度双重检查每个用户交互和(恕我直言)开发模式下的每个 http 调用,以防止计时和“检查后更改值”错误。
【讨论】:
嗨 Tobias,Ethan,请查看查询中最后编辑的选项。可以看到chrome dev工具栏事件 是的,它调用了两次。仍然不知道这些是哪种 http 方法。可能是 cors 的 OPTIONS 方法和“真实”调用的 POST 方法 顺便说一句:如果您的后端支持 json-post-body,则不需要JSON.stringify(servers)
如果 rest 被调用两次?这将是一个性能问题。我团队的架构师不允许我这样做。所有其他 API 都是这种情况吗? Spring rest,Java Rest - 在所有这些情况下它会调用两次?这是它的工作原理还是我的代码是罪魁祸首?
正如@Tobias 所说,两个请求并不意味着两个API 调用。如果您打开第一个请求详细信息,您可能会看到 HTTP 方法设置为 OPTIONS。这意味着 Angular 正在运行 CORS。以上是关于Angular 4 两次调用 WCF REST的主要内容,如果未能解决你的问题,请参考以下文章
Angular 2 http get observable 调用了两次