angular - 当 Web API 返回 void 时订阅 observable

标签 angular asp.net-core asp.net-web-api2

我有一个返回 void 的 web api 删除方法

在 Angular 2 中,如果我不订阅 Observable,web api 方法将永远不会被调用。 QuestionCold vs Hot observables .由于需要返回一个 observable 和订阅,我试图将一个 Observable 返回为:

服务.ts

public deleteProduct = (product: ProductApi): Observable<boolean> | boolean => {
   this._http.delete(this.actionUrl + product.productId)
   .catch((error:boolean) => Observable.throw(false));
   return true;
}

组件.ts

deleteProduct(product: ProductApi, event: any): void {
   event.stopPropagation();
   this.productApiService
   .deleteProduct(product)
   .subscribe((boolean) => {
   this.products = this.products.filter(p => p !== product);
   if (this.selectedProduct === product) { this.selectedProduct = null; }},
      error => console.log(error),
      () => {
      console.log('ProductApiService:Delete completed');
    });
 }

Controller .cs

// DELETE api/product/5
[HttpDelete("{id}")]
public void Delete(int id)
{
    _productService.DeleteProduct(id);
}

或者有办法返回一个 Observable<'void'> 吗?或者如果上述方法是正确的,我该如何解决以下错误?

  • 构建:参数“boolean”隐式具有“任何”类型
  • 构建:参数“error”隐式具有“任何”类型
  • 构建:“ bool 值”类型上不存在属性“订阅”|可观察的”

最佳答案

为什么你需要在删除请求中捕获? 您可以在订阅时向错误函数添加错误逻辑。

public deleteProduct(product: ProductApi): Observable<any> {
   return this._http.delete(this.actionUrl + product.productId);
}

然后

deleteProduct(product: ProductApi, event: any): void {
   event.stopPropagation();
   this.productApiService
   .deleteProduct(product)
   .subscribe(
     response => {
       this.products = this.products.filter(p => p !== product);
       if (this.selectedProduct === product){
         this.selectedProduct = null; 
       }},
      error => console.log(error),
      () => {
      console.log('ProductApiService:Delete completed');
    });
}

如果在此更改之后您的 Controller 仍未被调用,我认为这是路由错误。

关于angular - 当 Web API 返回 void 时订阅 observable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40596951/

相关文章:

c# - 将 IOptions<> 注入(inject)静态类

.Net Core 依赖注入(inject) - 替换子范围内的依赖关系

c# - 在内存中创建 Zip 存档,并从 web api 返回它

javascript - Angular 5 如何设置最小延迟(或超时)?

angular - 使用 LocalStorage 中的 AuthToken 为 NgRx Store 补水的正确方法和位置

authentication - 如何在 AspNetCore SignalR Alpha 中启用 Windows 身份验证

c# - 我的 Controller 方法是异步执行的吗?

angular - 如何在不使用对象引用的情况下比较Angular中的两个对象

javascript - 编译错误 5 MIN QUICKSTART Angular 2.0

c# - 在没有 Entity Framework 的情况下创建 Odata Web API 应用程序