В тестировании и производстве такой хост неизвестен

#iis #.net-core

Вопрос:

В моем контроллере .Net Core у меня есть действие «PublishDraft». Это работает так, как и ожидалось в localhost во время разработки. Как только это будет развернуто на тестовом или производственном серверах, это действие вернет ошибку «Такой хост неизвестен».

Это одно из многих действий на этом контроллере, и все они работают в тестировании и производстве, за исключением одного действия PublishDraft (). Таким образом, это говорит мне, что это не может быть проблемой DNS, так как все остальные действия работают.

         [HttpPost("PublishDraft")]
        public async Task<IActionResult> PublishDraft([FromBody] PublishDraftRequest request)
        {
            try
            {
                var existing = _unitOfWork.Drafts.GetAll(d => d.Id == request.DraftId, null, "DraftTags").FirstOrDefault();

                if (existing == null)
                {
                    return NotFound("Draft does not exist");
                }

                var created = await _unitOfWork.Drafts.PublishDraft(existing, User.Claims.GetUserId());

                if (created.TreeNodeTypeId == (int)TreeNodeTypes.Private amp;amp; created.ParentId != null)
                {
                    await _unitOfWork.TreeNodeUser.UpdateUserPermissionsAsync(created.Id, created.ParentId, User.Claims.GetUserId());
                }

                return Created("TreeNode", created);
            }
            catch (Exception ex)
            {
                logger.LogError(ex, User);
                return BadRequest(ex.Message);
            }
        }
 

Независимо от того, тестирую ли я это с помощью веб-клиента (Angular) или почтальона в тестовом или производственном режиме, я получаю ту же ошибку при этом одном действии.

Серверы-это IIS 10.

Есть какие-нибудь идеи, почему это происходит?

Обновить:

Чтобы ответить на вопросы комментаторов о том, что показывает стек вызовов исключений, исключений нет! Действие контроллера никогда не выполняется, поэтому никаких исключений не регистрируется.

ОБНОВЛЕНИЕ 2 — Добавлены скриншоты ошибок

Снимок экрана заголовка инструментов разработчика (я удалил доменное имя на этом снимке экрана)

Скриншот заголовка инструментов разработки

Dev Tools Response screenshot
Dev Tools Response screenshot

I found an interesting anomaly that changes the way I look at this issue, I’m only getting the «unknown host» error when the DraftId exists. But when I pass in a bogus DraftId, then I get the error message «Draft does not exist», which tells me that the controller action is actually being hit after all.

I still don’t know why the «unknown host» error occurs in Test or Production and it works locally in development, but I’m adding some trace logging to see if I can find out where the issue is occurring.

Решено — 9 сентября 2021 года

Это просто причина непоследовательности с моей стороны. Все сводилось к завершающей черте на конечной точке.

(Разбрызгивание журналов трассировки по всему моему коду помогло мне отследить причину.)

Моя служба должна использовать HttpClient для вызова внешнего api из PublishDraft() метода действия контроллера.

В моих приложениях localhost есть конфигурация для базовой конечной точки, подобная этой:

   "EndPointsConfig": {
    "FileStore": "https://localhost:44314/"
  }
 

Завершающая косая черта верна.

Мои Testing и Production AppSettings свойства были:

   "EndPointsConfig": {
    "FileStore": "https://filestore.domain.com"
  }
 

Отсутствующая завершающая косая черта вызвала ошибку «Такой хост неизвестен», поскольку она должна была связать путь к методу, а без косой / черты это было явно неверно.

Подобный этому: https://filestore.domain.com/deleterange

Как только косая черта была добавлена, все это сработало!

Надеюсь, другие найдут это полезным при решении аналогичных проблем.

Комментарии:

1. Какая конкретная строка выдает ошибку? Каково полное сообщение об ошибке и трассировка стека, а также сведения о любых внутренних исключениях? Действительно ли вы потратили время на проверку соответствия URL-адреса тому, каким он должен быть в данном пункте кода, или вы предположили, что он соответствует вашим ожиданиям, не проверяя его?

2. Фактический стек вызовов исключения так же важен, как и сообщение об ошибке исключения. Так что без достаточной информации никто другой не сможет легко помочь.

3. @mason — в том-то и дело, что действие контроллера никогда не выполняется, так что исключений нет. Если бы у меня было исключение, я бы разместил его здесь. Я также добавил глобальный обработчик исключений, чтобы перехватывать все необработанные исключения, и по-прежнему никаких ошибок не регистрируется.

4. @mason — как я уже упоминал, этот код работает локально, без каких-либо ошибок. Он публикует полезную нагрузку и возвращает правильный ответ с данными. Но при развертывании на тестовых или производственных серверах это единственное действие контроллера никогда не выполняется. Да, я могу проверить, что URL-адрес соответствует предполагаемой конечной точке.

5. Вы говорите: «это действие возвращает … ошибку» — значит, теперь вы говорите, что это действие на самом деле даже не выполняется? Как вы настроили свой глобальный обработчик исключений? И где вы видите сообщение «Такой хост неизвестен»? В браузере? Какие сетевые компоненты существуют между вашим клиентом и веб-сервером, которые потенциально могут создать страницу с ошибкой?