2017-02-20 16 views
0

Я работал над учебником по Tour of Heroes, работает отлично.Угловой 2 + web api

Я сделал веб-api с C# в качестве небольшого backend для дальнейшего тестирования. Когда я пытаюсь присоединиться к указанному серверу, угловая возвращает ошибку 404, которая не найдена, даже если следующая вкладка находится на той же самой дороге.

Это ошибка:

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

Я попытался Войти в ответ на вызове, я возвращаю «[объект Object]», но я предполагаю, что это сообщение об ошибке сами.

@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; 

    } 

Я действительно не знаю, как я должен проверять дальше? Я читаю на обещаниях и наблюдаемым, чтобы увидеть, если я что-то пропустил, но это самый простой пример, который я мог думать:/

Edit:

Я изменил отклик API для JSON, следуя этим : 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 на пути, я подозреваю, что проблема не связана с форматом ответа, а скорее с конфигурацией углов. Как я могу это проверить?

EDIT: Может ли разница между структурой моих объектов вызвать эту ошибку 404? Если мой json-персонаж, приходящий с сервера, имеет больше полей, чем json-символ, определенный в angular2, что происходит?

Спасибо

+0

Что происходит, когда вы переходите с браузером прямо к [http: // localhost: 58225/api/Character] (http: // localhost: 58225/api/Character) – PierreDuc

+0

Может быть, возможно, response.json() 'вместо' response.json(). data' ?? – Alex

+0

Прежде всего, настройте свой C# web-api, чтобы вернуть JSON! – mxii

ответ

0
  • ВСП является чувствительным к регистру!
private charactersUrl = 'http://localhost:58225/api/character'; 
  • ваш сервер должен ответ только JSON-строку

  • кажется, нет data собственности, поэтому использовать его как это:

.then((response => response.json() as Character[])) 
  • chang e ваш сервер работает так (сериализуйте для себя!)
public string GetAll() 
{ 
    List<Character> myCharacs = repo.Get().ToArray(); 
    return jsonConverter.Serialize(myCharacs); 
} 
  • или пусть рамки делать работу ..
public IEnumerable<Character> GetAll() 
{ 
    List<Character> myCharacs = repo.Get().ToArray(); 
    return myCharacs; 
} 
+0

. Правило API-кода верное в моем коде, я не знаю почему копия-вставка указана в нижнем регистре. Мой сервер теперь дает строку JSON в качестве ответа. Я попытался использовать ответ «response => .Json as Character []) Ничего не изменилось. – DoctorPrisme

+0

Если вы можете получить доступ к маршруту через браузер, не должно быть причин, чтобы угловой не мог! и ошибка 404 задается сервером, а не угловой. – mxii

+0

Хорошо ... Я согласен с тем, что нет причин, угловатых не может. Но все же ... – DoctorPrisme

0

Друг наконец нашел ответ:

ИЗВЛЕКИТЕ в памяти-DATA-SERVICE Рекомендации. Эта вещь блокирует HTTP-запросы.

У меня есть другая ошибка, но по крайней мере я могу достичь API.

 Смежные вопросы

  • Нет связанных вопросов^_^