Служба REST API возвращает ошибку 500, которая фактически равна 404. Ожидается та же работа при вызове IP-адреса службы
Мы столкнулись с проблемой, связанной с сервером, в одном из наших приложений-сервисов API (ASP.NET WEB API 2). Когда мы обращаемся к сервису по доменному имени сайта (api.xxx.com), сервис возвращает внутреннюю ошибку сервера (500). Но если мы обращаемся к одной и той же службе по IP-адресу сайта (11.111.11.111), то вернется правильный результат (404). Эта проблема возникает, только если сервер пытается вернуть 404.
- https://api.xxx.com/api/Test/getEmployee/1 [Возвращает 500 Ошибка]
- https://111.11.111.11/api/Test/getEmployee/1 [Получил ожидаемый результат (404)]
Работает нормально для одной и той же службы API и разных параметров, имеющих данные.
Мы проверили на стороне кода, ошибок нет.
Образец кода:
public IHttpActionResult GetEmployee(int employeeId)
{
try
{
var employee = employeeManager.GetEmployee(employeeId);
if (employee != null)
{
return Ok(employee);
}
}
catch (Exception ex)
{
Logger.Error("Error occured in GetEmployee: " + ex);
}
return NotFound();
}
Мы размещали сайт на сервере Azure.
Есть ли проблема с хостингом доменных имен / балансировщиком нагрузки / сервером ARR.
Пожалуйста, помогите нам решить эту проблему.
Заранее спасибо.
1 ответ
Предполагается, что служба приложений Azure не указана, а ваши теги немного сбивают с толку.
Это 404 вводит вас в заблуждение. 404 возвращается ARR, а не вашим API. Это происходит потому, что вам нужно Host: domain.com
по вашему запросу вы не можете просто HTTP/1.0 попасть на ваш сайт, как в дни Netscape.
То общедоступный IP-адрес, на который вы попали, это весь штамп Службы приложений (например, тысячи арендаторов / приложений), Host
заголовок помогает направить запрос к вашему API.
Плохая новость в том, что ваш API возвращает HTTP 500, но вы можете отладить его, включить ведение журнала, отключить пользовательские ошибки через web.config (чтобы вы могли видеть трассировку стека) и также включить отслеживание неудачных запросов.