Angular2 HttpClient不映射到接口

时间:2018-02-15 03:33:12

标签: angular typescript asp.net-web-api

我正在使用Angular和ASP.NET WebApi。我试图将API中的对象传递给Angular并将其映射到我用Typescript定义的接口。

这是我的TypeScript界面​​:

export interface IUser {
    userId: number;
    username: string;
}

这是我在后端的对象:

public class UserDto
{
    public int UserId { get; set; }
    public string Username { get; set; }
}

以下是来自我的用户服务的电话:

get(userId: number): Observable<IUser> {
    return this._http.get<IUser>(this._getUrl);
}

这是我尝试使用我得到的对象的地方:

ngOnInit(): void {
    this._userService.get(1).subscribe(data => { 
        this.user = { 
          userId: data.userId, username: data.username 
        };
      });
  }

我在API上调用的控制器中的函数:

    [HttpGet]
    [Route("Get")]
    public HttpResponseMessage Get()
    {
        return Request.CreateResponse(HttpStatusCode.OK, _userLogic.Get(1));
    }

这是_userLogic.Get()函数,以防您需要它。 (只是测试东西,虚拟数据)..

    public UserDto Get(int userId)
    {
        UserDto d = new UserDto()
        {
            UserId = 1,
            Username = "test"
        };

        return d;
    }

我的问题是我回来的对象实际上并没有映射到我的IUser Typescript界面​​。以下是我在调试时看到的内容:

enter image description here

它完全忽略(或跳过?)它看起来的映射片,只是从WebApi返回对象。

这意味着data.userId未定义。但是,如果我执行data.UserId,它可以工作。这并不理想,因为我没有获得映射到Typescript对象的好处(intellisense,主要是......)。

有什么想法吗?我完全被难倒了。

修改 根据Mike Tung在下面的建议..仍然没有这样做。

enter image description here

修改 我终于搞定了这个。我需要将以下行添加到WebApiConfig,以便从WebApi正确地序列化我的对象。谢谢你的帮助。

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
                new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new 
          System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));

1 个答案:

答案 0 :(得分:0)

您应该手动映射它。

get(userId: number): Observable<IUser> {
    return this._http.get(this._getUrl).map(response => //map it to object);
}