使用 POST 方法时的 HTTP 错误
Posted
技术标签:
【中文标题】使用 POST 方法时的 HTTP 错误【英文标题】:HTTP Errors When Using POST Methods 【发布时间】:2022-01-21 07:15:49 【问题描述】:我似乎不太明白如何从使用 ASP.NET 托管的 Blazor WASM 项目调用 HTTP POST 函数。我很难找到任何使用 .NET 6 之后的 POST 方法的示例,因为它太新了。我尝试将 content-headers 设置为 JSON 以及从实际控制器函数中检索请求正文的许多不同方法,但我只得到 500、415 和 400 错误。我也尝试过不使用模型绑定控制器功能,但无济于事。不过,我不认为这是问题所在,因为据我所知,使用 [ApiController] 属性可以推断出正确的模型绑定。我只能想象问题源于 HTTP 调用。
调用方法的服务:
public async Task CreateUser(User user)
await _httpClient.PostAsJsonAsync("users", user);
控制器功能:
[HttpPost]
public async Task PostUser(User user)
_context.Users.Add(user);
await _context.SaveChangesAsync();
上面的代码给出的只是一个简单的400错误。
另外,我已经手动将一个测试用户添加到数据库中,并且我能够毫无问题地检索它。
【问题讨论】:
您是否将您正在使用的 HttpClient 的基本 URL 设置为您的 api 的基本 URL? 【参考方案1】:这是我的一个演示项目中的一些代码,显示了获取 WeatherForecast 记录的 API 调用。
这是 Web Assembly 项目 DataBroker:
public class WeatherForecastAPIDataBroker : IWeatherForecastDataBroker
private readonly HttpClient? httpClient;
public WeatherForecastAPIDataBroker(HttpClient httpClient)
=> this.httpClient = httpClient!;
public async ValueTask<bool> AddForecastAsync(WeatherForecast record)
var response = await this.httpClient!.PostAsJsonAsync<WeatherForecast>($"/api/weatherforecast/add", record);
var result = await response.Content.ReadFromJsonAsync<bool>();
return result;
public async ValueTask<bool> DeleteForecastAsync(Guid Id)
var response = await this.httpClient!.PostAsJsonAsync<Guid>($"/api/weatherforecast/delete", Id);
var result = await response.Content.ReadFromJsonAsync<bool>();
return result;
public async ValueTask<List<WeatherForecast>> GetWeatherForecastsAsync()
var list = await this.httpClient!.GetFromJsonAsync<List<WeatherForecast>>($"/api/weatherforecast/list");
return list!;
这是它调用的控制器:
namespace Blazr.Demo.Controllers;
[ApiController]
[Route("[controller]")]
public class WeatherForecastController : ControllerBase
private IWeatherForecastDataBroker weatherForecastDataBroker;
public WeatherForecastController(IWeatherForecastDataBroker weatherForecastDataBroker)
=> this.weatherForecastDataBroker = weatherForecastDataBroker;
[Route("/api/weatherforecast/list")]
[HttpGet]
public async Task<List<WeatherForecast>> GetForecastAsync()
=> await weatherForecastDataBroker.GetWeatherForecastsAsync();
[Route("/api/weatherforecast/add")]
[HttpPost]
public async Task<bool> AddRecordAsync([FromBody] WeatherForecast record)
=> await weatherForecastDataBroker.AddForecastAsync(record);
[Route("/api/weatherforecast/delete")]
[HttpPost]
public async Task<bool> DeleteRecordAsync([FromBody] Guid Id)
=> await weatherForecastDataBroker.DeleteForecastAsync(Id);
演示项目的回购Blazor.Demo
Controller Code Data Broker Code
【讨论】:
以上是关于使用 POST 方法时的 HTTP 错误的主要内容,如果未能解决你的问题,请参考以下文章
AngularJS $http.POST 方法 405 错误
Web API POST 方法返回 HTTP/1.1 500 内部服务器错误
在 Spring boot 中使用 post 方法保存多个实体时的无限循环