【问题标题】:How do i call a Put-method from WEB API in separate project?如何在单独的项目中从 WEB API 调用 Put-method?
【发布时间】:2022-11-10 22:07:16
【问题描述】:

我已经为人员构建了一个连接到数据库的 Web API。我现在正试图从一个单独的 MVC 应用程序调用这个 Web API,它应该有完整的 CRUD。到目前为止,我已经设法使用 Get 和 Post-methods 来创建一个新人员并查看数据库中当前人员的列表。

当尝试对 Put-method 进行类似调用时,我收到以下错误:

这就是我的方法 UpdatePerson 在我的 API 应用程序中的编写方式:


        [HttpPut]
        [Route("{id:guid}")]
        public async Task<IActionResult> UpdatePerson([FromRoute] Guid id, UpdatePersonRequest updatePersonRequest)
        {
            var person = await dbContext.Persons.FindAsync(id);
    
            if (person != null)
            {   
                person.Name = updatePersonRequest.Name;
                person.Email = updatePersonRequest.Email;
                person.Phone = updatePersonRequest.Phone;
                person.Address = updatePersonRequest.Address;
    
                await dbContext.SaveChangesAsync();
    
                return Ok(person);
            }

这就是我尝试在单独的 MVC 项目中使用 API 的方式:

        [HttpGet]
        public IActionResult Edit()
        {
            return View();
        }

        [HttpPost]
        public async Task<IActionResult> Edit(PersonViewModel pvm)
        {
            HttpClient client = new();
            StringContent sContent = new StringContent(JsonConvert.SerializeObject(pvm), Encoding.UTF8, "application/json");
            HttpResponseMessage response = await client.PutAsync("https://localhost:7281/api/Persons/", sContent);

            response.EnsureSuccessStatusCode();

            if (response.IsSuccessStatusCode)
            {
                return RedirectToAction("Get");
            }
            else
            {
                return NotFound();
            }
        }

当我尝试通过 API 应用程序更新数据库时,一切正常,所以我不确定我的请求有什么问题。我希望这里的人可以立即发现问题或至少帮助我,因为我是 WEB API 的初学者。

我主要尝试更改我的 MVC 项目中的 URL,但问题仍然存在。

【问题讨论】:

    标签: c# asp.net-mvc asp.net-web-api


    【解决方案1】:

    你确定你收到请求了吗?看来您的 URI 是 “https://localhost:7281/api/Persons/” 并且您的 API 正在等待 "https://localhost:7281/api/Persons/{id}" -> 其中 {id} 应该是 guid 您需要在 URI 中附加 guid

    【讨论】:

    • 我曾多次尝试更改 URL,但无论我输入什么,我都会收到相同的错误。
    【解决方案2】:

    看起来请求没有收到正确的正确参数,因为出现在您图片中的 URI 似乎是一个通用方法。

    【讨论】:

    • 我也怀疑它与此有关,我将如何着手解决这个问题?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-20
    • 2018-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-14
    相关资源
    最近更新 更多