首页 > 解决方案 > Swagger UI 和 ASP.NET - 未找到映射异常 - 无法访问 swagger UI 页面

问题描述

我在 Visual Studio 2017 (.NET Framework 4.6.1) 中创建了一些 ASP.NET Web API 项目。

SwaggerConfig.cs我使用该文件启用了招摇 UI 。

一切正常,我可以通过http://localhost:54408/swagger/ui/index/.

我想在应用程序启动时直接访问此 URL(默认地址为:)http://localhost:54408,因此我将Project Url项目属性(Web选项卡)中的值更改为http://localhost:54408/swagger/ui/index/.

从那一刻起,我无法访问招摇的 UI 页面。我试图回滚我的更改,但没有帮助。

现在,当我尝试进入 swagger 的 UI 页面时,出现以下异常:

<Error>
    <Message>An error has occurred.</Message>
    <ExceptionMessage>Mapping not found - index/</ExceptionMessage>
    <ExceptionType>Swashbuckle.SwaggerUi.AssetNotFound</ExceptionType>
    <StackTrace> at Swashbuckle.SwaggerUi.EmbeddedAssetProvider.GetAsset(String rootUrl, String path) at Swashbuckle.Application.SwaggerUiHandler.SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
    </StackTrace>
</Error>

我做了一些研究,发现我应该删除.vs项目文件夹中的一个文件夹。那没起效。关于我还能做什么的任何想法?

此时我知道我应该更改Start URL项目属性中的选项,但现在我遇到了描述的异常。

标签: c#asp.netvisual-studioswaggerswagger-ui

解决方案


很晚的回应,但我想我只是想出了这个。

长答案: 问题是由于将应用程序根添加为 swagger URL,正如您所指出的,这会导致在该位置创建一个虚拟目录,这意味着无法加载 swagger 文档。当您加载应用程序时,dotnet 还会创建一个 http 301 重定向,以将任何缺少的“/”字符添加到根目录中 URL 的末尾。此重定向在客户端缓存,因此即使您还原更改并删除 .vs 目录(两者都是必需的),浏览器仍在尝试从 'swagger/ui/index/' 而不是 'swagger/ 加载 swagger用户界面/索引'。您可以通过禁用浏览器开发工具中的缓存 禁用缓存或使用其他浏览器来解决此问题。

简短回答: 修复:

  1. 恢复应用程序的根路径
  2. 删除 .vs 目录
  3. 暂时禁用浏览器缓存(加载成功后可以重新启用)

推荐阅读