В Web API либо создайте созданный URL-адрес местоположения вручную
[HttpPost]
public IActionResult PostNewUser([FromBody]UserDto userDto) {
if (userDto == null)
return BadRequest(nameof(userDto));
IUsersService usersService = GetService<IUsersService>();
var id = usersService.Add(userDto);
//construct desired URL
var url = string.Format("api/users/{0}",id.ToString());
return Created(url, id.ToString());
}
, либо используйте одну из CreateAt*
перегрузок
//return 201 created status code along with the
//controller, action, route values and the actual object that is created
return CreatedAtAction("ActionName", "ControllerName", new { id = id }, id.ToString());
//OR
//return 201 created status code along with the
//route name, route value, and the actual object that is created
return CreatedAtRoute("RouteName", new { id = id }, id.ToString());
В клиенте местоположение извлекается иззаголовок ответа.
status HttpClient client = new HttpClient();
public async Task<int> CreateUser(UserDto dto) {
string endpoint = ApiQuery.BuildAddress(Endpoints.Users);
var json = new StringContent(JsonConvert.SerializeObject(dto), Encoding.UTF8, "application/json");
var postResponse = await client.PostAsync(endpoint, json);
var location = postResponse.Headers.Location;// api/users/{id here}
var id = await postResponse.Content.ReadAsAsync<int>();
return id;
}
Вы также, похоже, отправляете идентификатор как часть ответа, который можно получить из содержимого ответа.
Обратите внимание на рефакторинг HttpClient
чтобы не создавать каждый раз экземпляр, который может привести к чрезмерному истощению, что может привести к ошибкам.