我在Visual Studio 2017(.NET Framework 4.6.1)中创建了一些ASP.NET Web API项目。
我使用SwaggerConfig.cs
文件启用了swagger UI。
一切正常,我可以通过http://localhost:54408/swagger/ui/index/
访问用户界面。
我想在应用程序启动时直接转到此URL(默认地址为:http://localhost:54408
),因此我将项目属性(Project Url
选项卡)中的Web
值更改为http://localhost:54408/swagger/ui/index/
。
从那一刻起,我无法访问swagger 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
选项,但现在我遇到了异常描述。
我偶然发现了同样的问题。经过很长时间后,我无法为此找到一个简单的解决方案,我想到解决这个问题的唯一方法就是创建一个新项目并将所有文件复制到新项目中。删除旧的,将启动项目设置为新项目并完成。奇迹般有效。
反应非常晚,但我想我只想出这个。
答案很长:问题是由于将应用程序root添加为swagger URL引起的,正如您所指出的那样导致在该位置创建虚拟目录,这意味着无法加载swagger文档。加载应用程序时,dotnet还会创建一个http 301重定向,以将任何缺少的“/”字符添加到根目录中URL的末尾。此重定向是缓存客户端,因此即使您还原更改并删除.vs目录(这两者都是必需的),浏览器仍在尝试从'swagger / ui / index /'而不是'swagger /'加载swagger UI /索引”。您可以通过在浏览器开发工具中禁用缓存或使用其他浏览器来解决此问题。
简答:修复: