为什么我发布我的API应用程序后,"路由集合中已经有一个名为'swagger_docs'的路径已经出现了?"

Pan*_*nos 16 azure asp.net-web-api azure-web-sites

发布我的API应用程序后,我得到了ASP.NET的黄色错误屏幕.错误消息显示"名为'swagger_docs'的路径已经在路径集合中".

我怎样才能解决这个问题?

Pan*_*nos 38

这与API应用程序本身无关,但与Web API有关.触发错误的原因很简单:

  1. 您发布了基于Web API的API App.
  2. 您丢弃项目并开始使用基于Web API的新API应用程序
  3. 您希望发布新的API应用程序,而不是您在步骤1中创建的旧API应用程序.
  4. 您在"发布..."期间选择了API应用程序,并获得了我们在步骤1中部署的现有API应用程序的发布配置文件.
  5. 您使用Web Deploy和发布配置文件进行部署,新的API应用程序位于旧的API应用程序之上.

这将引发我之前解释过的问题.这是因为当您尝试启动应用程序时,Swashbuckle会注册两条路由.旧的一个和新的一个.那是因为旧文件仍然存在于目的地.

要解决此问题,请在Web部署期间单击"设置"选项卡,然后展开"文件发布选项".那里有一个复选框,名为"从目的地删除其他文件".这将解决问题,因为它只会留下您在目的地部署的文件而不是旧文件.

设置 - >文件发布选项

希望能帮助到你.

  • 如果尝试在本地调试应用程序时会发生什么? (4认同)

小智 10

如果尝试在本地调试应用程序时会发生什么?这件事发生在我身上,原因是,我改名为我的集会名称.所以bin文件夹有两个dll用于同一项目,具有不同的名称导致此错误.一旦我删除了旧的名为dll一切都很好.希望这可以帮助.


小智 5

发生这种情况是因为您可能正在WebApiConfig类 SwaggerConfig类中配置路由,如下所述:

WebApiConfig文件:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        SwaggerConfig.Register();
    }
}
Run Code Online (Sandbox Code Playgroud)

SwaggerConfig文件:

using Swashbuckle.Application;

[assembly: PreApplicationStartMethod(typeof(SwaggerConfig), "Register")]

namespace NEOH.Api
{
    public class SwaggerConfig
    {
        public static void Register()
        {
Run Code Online (Sandbox Code Playgroud)

您应该做的是删除SwaggerConfig文件上的程序集调用。

它应该工作。