ASP.NET Web API 一对多的CRUD

XuDong Peng-MSFT 10,511 信誉分 Microsoft 供应商
2024-01-31T07:52:13.1166667+00:00

我创建了Web API列出所有玩家:

我需要代码来实现:

  1. 通过ID来获取玩家信息
  2. 创建一个新玩家

玩家信息将以 JSON 格式在正文中发送:

{  
  "name": "player name 5",  
  "position": "midfielder",  
  "playerSkills": [ 	
	{"skill": "attack","value": 60},	
	{"skill": "speed","value": 80}  
  ]
}

此部分的预期结果是创建玩家。 结果还可以包含其他字段,比如添加玩家的 id 和技能,例如:

{  
  "id": 1,  
  "name": "player name 5",  
  "position": "midfielder",  
  "playerSkills": [	
	{"id": 1,"skill": "attack","value": 60,"playerId": 5},	
	{"id": 2,"skill": "speed","value": 80,"playerId": 5}  
  ]
}

更新玩家信息:

该应用程序需要支持玩家信息的更新,其中 playerId 是正在更新的玩家的 ID。

玩家信息将以 JSON 格式在正文中发送:

{  
  "name": "player name updated",  
  "position": "midfielder",  
  "playerSkills": [	
	{"skill": "strength","value": 40},	
	{"skill": "stamina","value": 30}  
  ]
}

此部分的预期结果是更新玩家信息。 结果还可以包含其他字段,比如为玩家创建的 id 和技能,例如:

{  
  "id": 1,  
  "name": "player name updated",  
  "position": "midfielder",  
  "playerSkills": [	
	{"id": 3,"skill": "strength","value": 40,"playerId": 1},	
	{"id": 4,"skill": "stamina","value": 30,"playerId": 1}  
  ] 
}

此外,应用程序需要支持删除玩家信息,其中playerId是要删除的玩家的 ID。

删除玩家信息的功能中应使用授权标头中的持有者令牌进行保护。授权标头的值应为:

Bearer SkFabTZibXE1aE14ckpQUUxHc2dnQ2RzdlFRTTM2NFE2cGI4d3RQNjZmdEFITmdBQkE=

Note: 该问题整理于:asp.net web api one to many crud

ASP.NET API
ASP.NET API
ASP.NET: .NET Framework 中一套用于生成 Web 应用程序和 XML Web 服务的技术。API: 支持两个应用程序相互交互的软件中介。
8 个问题
0 个注释 无注释
{count} 票

接受的答案
  1. Lan Huang-MSFT 29,336 信誉分 Microsoft 供应商
    2024-01-31T08:52:25.9966667+00:00

    您好, 根据您的描述,您似乎想通过.NET WebAPI和实体框架来实现数据库CRUD。

    事实上,在官方文档中,你可以找到一个简单的例子。 就像这个文档(带有示例):将 Web API 2 与 Entity Framework 6 教程系列结合使用。

    对于你的情况,我认为你的主要问题是在请求过程中需要处理请求数据,然后分别在这两个表中进行CRUD操作。 例如,您将尝试插入玩家的记录。 在你提供的json数据中,实际上包含了两个表的数据,你需要在[FromBody]或HttpRequestMessage中获取它,并进行必要的处理,如下所示:

    public IHttpActionResult Post([FromBody] players player)
            {
                if (!ModelState.IsValid)
                {
                    return BadRequest(ModelState);
                }
                else
                {
                    //insert new record into database.  
                    db.Players.Add(player);
                    db.SaveChanges();
                    foreach (var skill in player.playerSkills)
                    {
                        //set the ID of each skill  
                        skill.playerId = player.Id;
                        db.PlayerSkills.Add(skill);
                        db.SaveChanges();
                    }
                    return Ok(player);
                }
            }
    

    您需要手动将playerId属性分配给每个playerSkill对象。 所以主要看你的表结构设计和逻辑处理。

    另外,对于授权令牌,您可以简单参考此文档:ASP.NET Web API中的身份验证和授权


    如果答案是正确的,请点击“接受答案”并点赞。 如果您对此答案还有其他疑问,请点击“评论”。 注意:如果您想接收相关电子邮件,请按照我们的文档中的步骤启用电子邮件通知 此线程的通知。

    0 个注释 无注释

0 个其他答案

排序依据: 非常有帮助

你的答案

问题作者可以将答案标记为“接受的答案”,这有助于用户了解已解决作者问题的答案。