首页 > 解决方案 > 在测试和生产中没有这样的主机

问题描述

在我的 .Net Core 控制器中,我有一个“PublishDraft”操作。这在开发期间在 localhost 中按预期工作。一旦将其部署到测试或生产服务器,此操作将返回“No such host is known”错误。

这是此控制器上的许多操作之一,它们都在测试和生产中工作,除了这个单一的 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 && 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);
            }
        }

无论我在测试或生产中使用 Web 客户端 (Angular) 还是 PostMan 进行测试,我都会在这个单一操作中得到相同的错误。

服务器是 IIS 10。

任何想法为什么会发生这种情况?

更新:

要回答评论者关于异常调用堆栈显示什么的问题,没有例外!控制器操作永远不会被命中,因此不会记录任何异常。

更新 2 - 添加了错误截图

Dev Tools Header 截图(我在这个截图中删除了域名)

开发工具标题屏幕截图

开发工具响应截图 开发工具响应截图

我发现了一个有趣的异常,它改变了我看待这个问题的方式,当 DraftId 存在时,我只会收到“未知主机”错误。但是当我传入一个虚假的 DraftId 时,我会收到错误消息“草稿不存在”,这告诉我控制器操作实际上被击中了。

我仍然不知道为什么在测试或生产中出现“未知主机”错误并且它在本地开发中工作,但我正在添加一些跟踪日志以查看是否可以找出问题发生的位置。

已解决- 2021 年 9 月 9 日

这只是我不一致的原因。这一切都归结为端点上的斜线。

(在我的代码中添加跟踪日志帮助我找到了原因。)

我的服务需要使用从控制器操作HttpClient的方法内部调用外部 api 。PublishDraft()

我的 localhost appSettings 有一个基本端点的配置,如下所示:

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

尾部斜线是正确的。

我的TestingProductionappSettings 属性是:

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

缺少的尾部斜杠导致“没有这样的主机是已知的”错误,因为它必须连接方法的路径并且没有斜杠/显然是不正确的。

像这样:https://filestore.domain.com/deleterange

添加斜线后,一切正常!

希望其他人发现这对解决类似问题很有用。

标签: iis.net-core

解决方案


推荐阅读