У меня есть ASP. NET Core API, вызывающий второй API.
Я выбрасываю исключение на своем уровне служб, если возникает ошибка второго API:
var response = await httpClient.SendAsync(request); //call second API
if (!response.IsSuccessStatusCode)
{
//return HTTP response with StatusCode = X, if response.StatusCode == X
throw new HttpRequestException(await response.Content.ReadAsStringAsync());
//this always returns 400
}
Как я могу выдать исключение, которое возвратит ответ с тем же кодом состояния от второго вызова API?
Если я использую HttpRequestException
, он всегда вернет 400, даже если response
объект имел StatusCode = 500
.
РЕДАКТИРОВАТЬ: Первая конечная точка API выглядит следующим образом:
public async Task<ActionResult<HttpResponseMessage>> CreateTenancy([FromBody]TenancyRequest tenancy)
{
//Make some calls...
return Created(string.Empty, new { TenancyID = newTenancyExternalId });
}
Вторая конечная точка API выглядит следующим образом:
[HttpPost]
public IHttpActionResult CreateTenancy([FromBody]TenancyDTO tenancyDTO)
{
var tenancy = GetTenancy();
return Created(string.Empty, tenancy);
}
Я пытался использовать throw new HttpResponseException(response);
, но это удаляет описательное сообщение об исключении, полезная нагрузка заканчивается следующим образом:
{
"Code": 500,
"CorrelationId": "2df08016-e5e3-434a-9136-6824495ed907",
"DateUtc": "2020-01-30T02:02:48.4428978Z",
"ErrorMessage": "Processing of the HTTP request resulted in an exception. Please see the HTTP response returned by the 'Response' property of this exception for details.",
"ErrorType": "InternalServerError"
}
Я хотел бы сохранить значение ErrorMessage
в исходном полезная нагрузка:
{
"Code": 400,
"CorrelationId": "ff9466b4-8c80-4dab-b5d7-9bba1355a567",
"DateUtc": "2020-01-30T03:05:13.2397543Z",
"ErrorMessage": "\"Specified cast is not valid.\"",
"ErrorType": "BadRequest"
}
Конечная цель - вернуть это значение:
{
"Code": 500,
"CorrelationId": "ff9466b4-8c80-4dab-b5d7-9bba1355a567",
"DateUtc": "2020-01-30T03:05:13.2397543Z",
"ErrorMessage": "\"Specified cast is not valid.\"",
"ErrorType": "InternalServerError"
}