【问题标题】:ASP Web APi - Post listASP Web APi - 帖子列表
【发布时间】:2022-12-21 16:37:17
【问题描述】:

我正在做一个项目来记录软件工程师的技能。 工程师将进行的每次提交都将记录多项技能及其相应的分数。

我的模型

 public partial class Score
{
    public int Id { get; set; }
    public int User { get; set; }
    public int SubmissionPeriod { get; set; }
    public int Capability { get; set; }
    public byte Score1 { get; set; }
}

我的 Web API 帖子:

[HttpPost]
    public async Task<ActionResult<Score>> PostScore(Score score)
    {
        _context.Scores.Add(score);
        await _context.SaveChangesAsync();

        return CreatedAtAction("GetScore", new { id = score.Id }, score);
    }

我的通话界面:

        public ActionResult NewSubmission(ScoreModel  newScoreSubmission)
        {

            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri(Baseurl + "/api/Scores/PostScore");

                //HTTP POST
                var postTask = client.PostAsJsonAsync<ScoreModel>(client.BaseAddress, newScoreSubmission);
                postTask.Wait();

                var result = postTask.Result;
                if (result.IsSuccessStatusCode)
                {
                    return RedirectToAction("ListScores");
                }
                else
                { //ModelState.AddModelError(string.Empty, "An Error Occured in 'public ActionResult NewCapability'- Please contact Dev Support ");
                }
            }



            return View(newScoreSubmission);

        }

问题显然是为单次输入设置的。因此每次调用 Web API 一个“分数”。 我确定我需要以某种方式传递分数对象列表,但尽管阅读了几篇文章,我还是感到非常迷茫和困惑。

希望你们能帮忙告诉我我哪里出了问题或者代码可能是什么样子的..

谢谢阅读..

【问题讨论】:

  • “我需要以某种方式传递一个列表”——为什么?传递列表可能有助于减少调用次数,但如果这不是问题,您可以坚持使用单个对象。
  • 但是,如果每次提交有 50 个分数,那不是很浪费吗?

标签: c# entity-framework webapi


【解决方案1】:

您需要更改获取列表的方法。

[HttpPost]
public async Task<ActionResult<List<Score>>> PostScore(List<Score> scores)
{
    _context.Scores.AddRange(scores);
    await _context.SaveChangesAsync();

    return CreatedAtAction("GetScores", scores);
}

并相应地更改 UI 代码,我没有编写完整的代码。

public ActionResult NewSubmission(List<ScoreModel> newScoreSubmissions)
{
    List<Score> scores = new List<Score>();
    foreach (var newScoreSubmission in newScoreSubmissions)
    {
        scores.Add(new Score
        {
            User = newScoreSubmission.User,
            SubmissionPeriod = newScoreSubmission.SubmissionPeriod,
            Capability = newScoreSubmission.Capability,
            Score1 = newScoreSubmission.Score1
        });
    }

    using (var client = new HttpClient())
    {
        client.BaseAddress = new Uri(Baseurl + "/api/Scores/PostScore");

        var postTask = client.PostAsJsonAsync<List<Score>>(client.BaseAddress, scores);
        ...
    }

    return View(newScoreSubmissions);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-13
    • 2018-03-29
    • 2020-03-28
    • 2013-12-03
    • 2020-04-11
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    相关资源
    最近更新 更多