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