Служба REST API возвращает ошибку 500, которая фактически равна 404. Ожидается та же работа при вызове IP-адреса службы

Мы столкнулись с проблемой, связанной с сервером, в одном из наших приложений-сервисов API (ASP.NET WEB API 2). Когда мы обращаемся к сервису по доменному имени сайта (api.xxx.com), сервис возвращает внутреннюю ошибку сервера (500). Но если мы обращаемся к одной и той же службе по IP-адресу сайта (11.111.11.111), то вернется правильный результат (404). Эта проблема возникает, только если сервер пытается вернуть 404.

  1. https://api.xxx.com/api/Test/getEmployee/1 [Возвращает 500 Ошибка]
  2. 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 (чтобы вы могли видеть трассировку стека) и также включить отслеживание неудачных запросов.

Другие вопросы по тегам