【问题标题】:POST 2 Guid parameters to API with Angular使用 Angular 将 2 Guid 参数发布到 API
【发布时间】:2021-02-01 16:43:55
【问题描述】:

我已经制作了一个 API 来关注用户。该方法接受 2 个参数,它们是两个 guid。方法:

// Follow user
[HttpPost]
public async Task<ActionResult<Guid>> FollowUser([FromBody] Guid user_gd, Guid user2_gd)
{
  if (ModelState.ErrorCount > 0)
  {
    return BadRequest();
  }
  var followedUser = await _user.FollowUser(user_gd, user2_gd);
  return Ok(followedUser);
}

API 中的管理器:

public async Task<bool> FollowUser(Guid user_gd, Guid user2_gd)
        {
            var followUserQuery =
                @"
                    insert into userbind(gd, user_gd, followed_user_gd, date_followed) 
                    values(@_gd, @_user_gd, @_followed_user_gd, @_date_followed)
                ";
            await PostQuery(followUserQuery, new
            {
                _gd = GenerateGd(),
                _user_gd = user_gd,
                _followed_user_gd = user2_gd,
                _date_followed = DateTime.Now
            });

            return true;
        }

Angular(服务)中的API请求:

followUser(followed_user, user_gd): Observable<any> {
    try {
      return this._http.post<any>(this._apiUrl + "FollowUser", { "user2_gd": followed_user, "user_gd": user_gd }, this.httpOptions);
    } catch (e) {
      console.log("POST error: ", e);
    }
  }

组件:

followUser(gd) {
    console.log(gd);
    this._userService.followUser(gd, localStorage.getItem("gd")).subscribe(
      res => {
        console.log(res);
      }
    )
  }

变量和一切现在都可以正常工作,但我每次都收到此错误:\

"无法将当前 JSON 对象(例如 {"name":"value"})反序列化为类型 'System.Guid',因为该类型需要 JSON 原始值(例如字符串、数字、布尔值、null)正确反序列化。\r\n要修复此错误,请将 JSON 更改为 JSON 原始值(例如字符串、数字、布尔值、null)或将反序列化类型更改为正常的 .NET 类型(例如,不是原始类型像整数,而不是可以从 JSON 对象反序列化的集合类型(如数组或列表)。还可以将 JsonObjectAttribute 添加到该类型以强制它从 JSON 对象反序列化。\r\nPath 'user2_gd',第 2 行,第 15 位。”

有人知道如何解决这个问题或遇到同样的问题吗?请联系。

【问题讨论】:

    标签: c# angular typescript asp.net-core asp.net-web-api


    【解决方案1】:

    尝试使用必填字段创建类并在您的 FollowUser 操作中将其作为参数接受:

    public class FollowUserParams
    { 
        public Guid user_gd { get; set; }
        public Guid user2_gd { get; set; }
    }
    
    // Follow user
    [HttpPost]
    public async Task<ActionResult<Guid>> FollowUser([FromBody] FollowUserParams p)
    {
       ... use p
    }
    

    另请参阅 Andrew Lock 的 post 关于 ASP 中的模型绑定。

    【讨论】:

    • 所以在我的经理中,我必须填写您创建的课程并返回?
    • 一会儿我会把它添加到我的问题中
    • @AntonioSk 你可以像await _user.FollowUser(p.user_gd, p.user2_gd)一样向它传递值
    • 我应该在哪里补课?
    • @AntonioSk 无处可去。当您在控制器中的FollowUser 操作将被调用时,ASP 将为您执行此操作。它将尝试将您在请求正文中(以角度)传递的参数绑定到此类(据我所知,现在对您来说失败了)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-27
    • 2017-01-15
    • 2017-04-15
    • 2023-03-11
    • 2013-10-30
    相关资源
    最近更新 更多