Angular 2 + web api

时间:2017-02-20 11:10:19

标签: api angular

我参与过“英雄之旅”教程,效果非常好。

我用C#做了一个Web api,作为一个小后端进行进一步测试。当我尝试加入所说的后端时,即使下一个标签位于同一条道路上,角度也会返回错误404,即使下一个标签位于完全相同的道路上也是如此。

这是错误:

*** Settings ***
Library         class_test.py


*** Test Cases ***
python class test
    [Tags]    class
    [Documentation]    python class test
    ${ret}=    test_jpg    class_tag
    Log    ${ret.TAG}
    Log    ${ret.args}

我已经尝试登录电话的答案,我返回了一个" [object Object]" ,但我想这是错误信息本身。

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

正如你所看到的,这里没有什么真正的原创。

/ api / Character返回包含我的字符列表的IEnumerable。

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

我真的不知道我应该如何进一步测试?我正在阅读承诺和观察,看看我是否错过了什么,但这是我能想到的最简单的例子:/

编辑:

我已经通过以下方式更改了json API的响应:How do I get ASP.NET Web API to return JSON instead of XML using Chrome?

当我直接浏览它时,API会立即返回:

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;

    }

没有区别。 (这是答案的一个例子,它实际上更长)

此外,由于答案是路径的404,我怀疑问题与答案的格式无关,而是与角度配置有关。我怎么能检查这个?

编辑:我的对象结构之间的区别是否会导致404错误?如果来自服务器的json字符的字段数多于angular2中定义的json字符,那会发生什么?

谢谢

2 个答案:

答案 0 :(得分:0)

  • WWW区分大小写!
private charactersUrl = 'http://localhost:58225/api/character';
  • 您的服务器应该仅响应JSON字符串

  • 似乎没有data属性,所以请按照以下方式使用:

.then( (response => response.json() as Character[]) )
  • 改变你的服务器功能(自己序列化为json!)
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;
}

答案 1 :(得分:0)

一位朋友终于找到了答案:

删除内存数据服务参考。那件事阻止了http请求。

我知道有不同的错误,但至少我可以访问API。