我正在使用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界面。以下是我在调试时看到的内容:
它完全忽略(或跳过?)它看起来的映射片,只是从WebApi返回对象。
这意味着data.userId未定义。但是,如果我执行data.UserId,它可以工作。这并不理想,因为我没有获得映射到Typescript对象的好处(intellisense,主要是......)。
有什么想法吗?我完全被难倒了。
修改 根据Mike Tung在下面的建议..仍然没有这样做。
修改 我终于搞定了这个。我需要将以下行添加到WebApiConfig,以便从WebApi正确地序列化我的对象。谢谢你的帮助。
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.SupportedMediaTypes.Add(new
System.Net.Http.Headers.MediaTypeHeaderValue("text/html"));
答案 0 :(得分:0)
您应该手动映射它。
get(userId: number): Observable<IUser> {
return this._http.get(this._getUrl).map(response => //map it to object);
}