2017-02-18 61 views
1

我試過http上的http Angular 2和TypeScript示例。 https://embed.plnkr.co/?show=previewAngular2 404找不到網址:http:// localhost/WebApi2/api /英雄

更新後的代碼使用外部網絡API

private headers = new Headers({'Content-Type': 'application/json'}); 
// private heroesUrl = 'api/heroes'; // URL to web api 
private heroesUrl = 'http://localhost/WebApi2/api/hero'; // URL to web api 

constructor(private http: Http) { } 

getHeroes(): Promise<Hero[]> { 
    return this.http.get(this.heroesUrl) 
       .toPromise() 
       .then(response => response.json().data as Hero[]) 
       .catch(this.handleError); 
} 

現在我想更新它使用外部Web API2和得到的錯誤如下。

例外:未捕獲的(在承諾):與狀態響應:404未找到的網址:http://localhost/WebApi2/api/hero「發生 錯誤對象{_body:對象,狀態:404,OK:假,狀態文本: 」未找到「 ,標題:對象,類型:空,網址: 「http://localhost/WebApi2/api/hero」}

我已經看過這個解決方案,但它並沒有爲我工作 Angular2 http get request results into 404

進口

錯誤。
import { Injectable } from '@angular/core'; 
import { Headers, Http } from '@angular/http'; 
import { JSONP_PROVIDERS } from '@angular/http'; 

Http/Http/node_modules/@ angular/http/index「'沒有導出成員'JSONP_PROVIDERS'。

任何人都可以指出我在正確的方向,例如從Angular2調用Web Api2?

+0

該資源在服務器上不存在。所以,無論是使用錯誤的URL還是服務器問題,這與Angular無關。 –

+0

您提供的Plunker鏈接不包含您的任何代碼。將其更新爲絕對鏈接 – ThunderStruct

+0

Angular 2本身是否具有Promise方法,或者您正嘗試使用ES6(TypeScript)Promise? – M98

回答

4

我在personnaly上打了兩個多星期,然後我登上了@ mp-loki的帖子 - Angular 2 HTTP GET 404 Not Found for URL - 這裏是在stackoverflow上:因此,信用真的要他(或她,爲了安全)。

在角設置頁面(https://angular.io/docs/ts/latest/guide/setup.html),您可獲贈了這樣一句話:「你的機器上安裝更快,更高效地開發的角度快速入門種子。」

你可能跟着上的指示設置頁面,因此您的項目基於Angular QuickStart種子

沒有什麼錯,只是通過角給出的教程使用的內存網頁API,並截取到另一個Web API的所有請求,不管你做一個直接調用內存網頁API從您的項目代碼或不。

要向不同的web api發出請求,您必須從內存web api中斷開連接。怎麼樣?只要按照下面的步驟:

  1. 在項目的根目錄,擴大node_modules並刪除angular-in-memory-web-api目錄
  2. 仍然在你的項目的根目錄,打開包。JSON文件,並刪除從依賴列表下面一行:"angular-in-memory-web-api": "~0.2.4",
  3. 的src /應用目錄,如果下面的文件退出,或內存相關的任何文件,將其刪除:in-memory-data.service.tsin-memory-data.service.jsin-memory-data.service.js.map
  4. 打開的src /應用/ app.module.ts並從進口清單如下:import { InMemoryWebApiModule } from 'angular-in-memory-web-api';,並在SRC import { InMemoryDataService } from './in-memory-data.service';
  5. 靜止/應用/ app.module.ts,刪除此行來自@NgModule批註的代碼: InMemoryWebApiModule.forRoot(InMemoryDataService),
  6. 在這個階段,你應該能夠發出請求到Web API,但最有可能返回不具有data屬性,讓你從你的服務文件中刪除的對象:更換:
getHeroes(): Promise<Hero[]> { 
    return this.http.get(this.heroesUrl) 
       .toPromise() 
       .then(response => response.json().data as Hero[]) 
       .catch(this.handleError); 
} 

getHeroes(): Promise<Hero[]> { 
    return this.http.get(this.heroesUrl) 
       .toPromise() 
       .then(response => response.json() as Hero[]) 
       .catch(this.handleError); 
} 

我希望這有助於秒。

+0

感謝mtchuente爲您提供的所有幫助。 –

1

我有同樣的問題,經過一些令人沮喪的研究,我解決了404錯誤感謝this。進口順序很重要。
希望它可以幫助別人。

+0

omg謝謝!有完全相同的問題。他們應該真的更新文檔。 –