.net - 为什么 web api 方法被多次调用
问题描述
我正在从角度调用如下所示的 web api 方法,但是 web api 方法被执行了两次。知道为什么会在这里发生。我已经在原点放置了一个控制台日志,角度代码并确认它是从角度调用一次。但是奇怪的 web api 方法被执行了两次,就像在线程上运行一样。
角码
public Createsamples(): Observable<any> {
var url = this.baseApiUrl + 'Test/Createsamples';
return this.httpService.post(url, JSON.stringify(obj), { headers: reqHeader, withCredentials: true });
}
网页接口代码
[System.Web.Http.RoutePrefix("api/Test")]
[EnableCors(origins: "*", headers: "*", methods: "*")]
public class TestApiController
{
[Route("Createsamples")]
[System.Web.Http.HttpPost]
public IHttpActionResult Createsamples()
{
TestBO Bo = new TestBO ();
var result = Bo.Createsamples(obj);
return Ok(result);
}
}
解决方案
您可能正在处理RxJS
副作用。
Observables 是冷的,除非有任何订阅,否则不会进行任何计算。
一旦你调用subscribe
或使用了observable | async
计算和副作用(在你的情况下是网络请求)。
为了避免副作用,您需要Observable
使用运算符进行共享并在模板上shareReplay(1)
重新使用:Observable
// your component code
ngOnInit() {
this.dataSource$ = this.service.apiCall().pipe(
shareReplay(1)
)
}
<!-- On your HTML template -->
<div *ngIf="dataSource$ | async as data">{{data |json }}</div>
<div *ngIf="dataSource$ | async as data">{{data |json }}</div>
尽管从技术上讲,此代码段中有两个订阅,但由于我们进行了Observable
共享,您应该只会看到 1 个网络请求,并且应该重复使用它的结果。
如果你执行this.service.apiCall()
了很多次,那么每次你创建一个Observable
与其他人没有任何关系的新的,并且没有办法Observable
被共享
推荐阅读
- php - 'mysql: not found', trying to connect a laravel, mysql and nginx in docker container
- cmake - How to export CMake targets with dependant include directories?
- python - How to update the array value and perform the same operation for the new values
- string - 查找字符串中出现的字符数(mips 32)
- python - Django, have model to be related to many instances of itself
- biopython - 使用 biobython SeqIO 模块编写和保存 GenBank 文件
- r - summarise(nAlive = n()) 中需要的其他信息?
- python-3.x - SConstruct - SyntaxError:无效的语法
- python - odoo 13用户设置中的双重设置?
- python - Kivy 文本输入自动滚动到文本顶部