【问题标题】:Angular can't cast results to object - is it IActionResult?Angular 无法将结果转换为对象 - 是 IActionResult 吗?
【发布时间】:2020-04-28 15:24:43
【问题描述】:

复制类似于昨天回答的一个: 尝试从后端返回特定的“用户”对象。
角度:

    this.authService.getUserByName(selectedName)
.subscribe( (response: User) => 
                 {  const selectedUser = response;
                    const firstname = selectedUser.FirstName;
                    this.f.FirstName.setValue(firstname); },
            (error) => 
                 { console.log(error); }
          );

身份验证服务:

  getUserByName(name: string): Observable<any> {
    const url = this.cache.StorageGet('baseUrl') + 'auth/user/' + name;
    return this.http.get(url);
  }

后端.netCore

[HttpGet("user/{userName}")]
public async Task<IActionResult> GetUserbyName(string userName)
{
    User userFromRepo = await _repo.GetUserbyName(userName.ToLower());

    if (userFromRepo == null)
        return BadRequest();

    return Ok(userFromRepo);
}

以上OK(userFromRepo):

请注意所有字段名称大写(与数据库中的相同,以及前端和后端中定义的“用户”中的名称)。 用户类 Angular:

export class User {
    Id: string;
    FirstName: string;
    LastName: string;
    Phone1: string;
    Phone2: string;
    KnownAs: string;
    EmailAddress: string;
    Username: string;
    PasswordHash: any;
    PasswordSalt: any;
    Question: string;
    Answer: string;
    ProjectAdmin: number;
    SystemAdmin: number;
    }

返回前端(调用服务的主函数):

调试器快照中显示的字段都是首字母小写。不仅: selectedUser.FirstName 显示为“未定义”,而且 selectedUser.firstName 会产生编译错误(当然)。
因此:响应没有被投射到用户?

我缺少什么(除了大脑、经验……)?

提前致谢。

瑜伽士

【问题讨论】:

  • 你能在 Angular 中展示你的用户模型吗?
  • 嗨,Angular:上面显示的导出类用户后端有这个:public class User { public int Id { get;放; } 公共字符串名字 { 获取;放; } 公共字符串姓氏 { 获取;放; } 公共字符串 Phone1 { 获取;放; } 公共字符串 Phone2 { 获取;放; } 公共字符串 KnownAs { 获取;放; } 公共字符串电子邮件地址 { 获取;放; } 公共字符串用户名 { 获取;放; } 公共字节 [] 密码哈希 { 获取;放; } 公共字节 [] PasswordSalt { 获取;放; } }
  • 和公共字符串 Question { get;放; } 公共字符串答案 { 得到;放; } 公共 int ProjectAdmin { 获取;放; } 公共布尔系统管理员 { 获取;放; } } 应该一样吗?
  • 是的,对不起,我怎么没看到!!

标签: angular .net-core casting


【解决方案1】:

User 类中的属性更改为camelCase。例如,

export class User {
    id: string;
    firstName: string;
    // and so on
}

正如您的第二个屏幕截图所示,API 在 camelCase 中返回 json。如果您无法更改大小写并想继续使用 PascalCase,那么您应该更改后端以返回 PascalCase。根据您的 .Net Core 版本,也许这个答案可以帮助您:https://stackoverflow.com/a/58135043/4552354

【讨论】:

  • 跟随那个链接......这可能是事情。我不想改变大小写......前端和后端都定义相同,但是 - 正如您的链接所示 - 有一种方法可以确保 json 翻译不会弄乱它。我想先尝试一下,然后再标记你的答案。非常感谢。稍后会回来。
猜你喜欢
  • 2020-04-23
  • 2019-12-23
  • 2019-01-24
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2018-01-03
  • 2012-03-20
相关资源
最近更新 更多