2017-02-20 12 views
0

私はTour of Heroesチュートリアルで働いています。角2 +ウェブAPI

私は、さらに小さなバックエンドとしてC#を使用してWeb APIを作成しました。上記のバックエンドに参加しようとすると、次のタブがまったく同じ道路にある場合でも、角がエラー404を返しません。

これはエラーです:

An error occurred Object { _body: Object, status: 404, ok: false, statusText: "Not Found", headers: Object, type: null, url: "http://localhost:58225/api/Character" } 

私はコールの答えのログインしようとしました、私は、「[オブジェクトのオブジェクト]」を返しますが、私は、エラーメッセージそのものだと思います。

@Injectable() 
export class CharacterService{ 
private charactersUrl = 'http://localhost:58225/api/Character'; 

constructor(private http:Http){} 

getCharacters(): Promise<Character[]>{ 
    alert("Getting Characters"); 

    var my_data = this.http.get(this.charactersUrl) 
        .toPromise() 
        .then(response => response.json().data) 

    console.log("Resultat de l'appel = "+my_data); 

    return this.http.get(this.charactersUrl) 
     .toPromise() 
     .then((response => response.json().data as Character[])) 
     .catch(this.handleError); 
} 

ご覧のとおり、ここには何もありません。

/api/Characterは、自分の文字のリストを含むIEnumerableを返します。

public IEnumerable<string> GetAll() 
    { 
     List<Character> myCharacs = repo.Get().ToList(); 
     List<String> myJsonCharacs = new List<string>(); 
     foreach (var charac in myCharacs) 
     { 
      var cur = jsonConverter.Serialize(charac); 
      myJsonCharacs.Add(cur); 
     } 

     return myJsonCharacs; 

    } 

私はさらにどのようにテストすると思いますか?私はこれに従うことによって、JSONのためのAPIの応答を変更した

:私は何かを逃したかどうかを確認するために約束して観測で読んだけど、これは私は考えることができ、最も簡単な例です:/

編集:How do I get ASP.NET Web API to return JSON instead of XML using Chrome?。私はそれを直接参照するとき

APIは今、これを返します。

["{\"characterName\":\"Azazel\",\"playerName\":\"Mulhouse\",\"game\":{\"name\":\"Call of Cthulhu\",\"BaseAttributes\":[{\"max\":18,\"value\":12,\"name\":\"appearance\"},{\"max\":18,\"value\":21,\"name\":\"constitution\"},{\"max\":18,\"value\":19,\"name\":\"strength\"},{\"max\":18,\"value\":17,\"name\":\"dexterity\"},{\"max\":18,\"value\":15,\"name\":\"power\"},{\"max\":18,\"value\":13,\"name\":\"size\"},{\"max\":18,\"value\":13,\"name\":\"intelligence\"},{\"max\":24,\"value\":12,\"name\":\"education\"}],..... 

には差は行われません。

また、答えはパスに対して404であるため、問題の形式は答えの形式には関係ありませんが、より角度の構成には関係していると考えられます(これは答えのサンプルです。どうすればこれをチェックできますか?

編集:オブジェクトの構造の違いによってこの404エラーが発生する可能性がありますか?サーバーから来る私のjsonキャラクタがangular2で定義されたjsonキャラクタより多くのフィールドを持っている場合、どうなりますか?

は、WWWは大文字と小文字が区別され、あなたに

+0

ブラウザで[http:// localhost:58225/api/Character](http:// localhost:58225/api/Character)に直接アクセスするとどうなりますか – PierreDuc

+0

おそらく ' response.json()。data'の代わりにresponse.json()を使用します。まず – Alex

+0

、JSONを返すようにC#web-apiをセットアップしてください! – mxii

答えて

0
  • をありがとうございました!
private charactersUrl = 'http://localhost:58225/api/character'; 
  • サーバーが応答だけでJSON文字列

  • にはdataプロパティがないように思えるので、このようにそれを使用する必要があります。

.then((response => response.json() as Character[])) 
  • あなたのサーバー機能はこのようになります(自分でjsonにシリアル化してください!

    IN-MEMORY-DATA-サービスを削除:友人は最終的に答えを見つけた

public IEnumerable<Character> GetAll() 
{ 
    List<Character> myCharacs = repo.Get().ToArray(); 
    return myCharacs; 
} 
+0

APIのURLの大文字と小文字は正しくありません 私のサーバーはJSON文字列を返すようになりました "response => response.JsonをCharacter []として使用しようとしました。 何も変更されていません。 – DoctorPrisme

+0

ブラウザ経由でルートにアクセスできる場合は、角度の傾きがない理由はありません。エラー404は角度からではなくサーバによって与えられる。 – mxii

+0

まあ...角ができない理由はないという事実に同意します。しかし、まだ.... – DoctorPrisme

0

public string GetAll() 
{ 
    List<Character> myCharacs = repo.Get().ToArray(); 
    return jsonConverter.Serialize(myCharacs); 
} 
  • やフレームワークが仕事をしてみましょう。..参照。そのことはhttp要求をブロックします。

    私は別のエラーがあることは知っていますが、少なくとも私はAPIに到達できます。