0
我有一个web api删除方法返回void当Web API返回无效时订阅observable
在angular 2中,如果我没有订阅Observable,web api方法将永远不会被调用。 Question和Cold vs Hot observables。由于有必要返回一个可观察和订阅,我试图返回一个观察为:
Service.ts
public deleteProduct = (product: ProductApi): Observable<boolean> | boolean => {
this._http.delete(this.actionUrl + product.productId)
.catch((error:boolean) => Observable.throw(false));
return true;
}
Component.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'>?或者如果上述方法是正确的,我该如何解决以下错误?
- 体形:参数“布尔”含蓄有一个“任意”类型
- 体形:参数“错误”含蓄有一个“任意”类型
- 编译:房产“订阅”不会对类型存在'布尔|可观察'
感谢您的回答,我不太明白为什么您使用map函数为:.map(response => response.json());因为WebAPI不返回任何值只是无效的? – Exec21
下面是响应web API转换void返回类型的解释:https://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/action-results。 因此该源的响应将看起来像: HTTP/1.1 204无内容 服务器:Microsoft-IIS/8.0 日期:星期一,2014年1月27日2时13分26秒GMT – Nikolai
是的,你的代码不使用任何响应数据,因此您可以删除该行代码。此响应可能对检查响应状态代码和实现不同状态代码的不同逻辑有用。 – Nikolai