#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 — Добавлены скриншоты ошибок
Снимок экрана заголовка инструментов разработчика (я удалил доменное имя на этом снимке экрана)
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. Вы говорите: «это действие возвращает … ошибку» — значит, теперь вы говорите, что это действие на самом деле даже не выполняется? Как вы настроили свой глобальный обработчик исключений? И где вы видите сообщение «Такой хост неизвестен»? В браузере? Какие сетевые компоненты существуют между вашим клиентом и веб-сервером, которые потенциально могут создать страницу с ошибкой?