Ошибка конфигурации Swashbuckle

Я пытаюсь добавить Swashbuckle в свой проект WebAPI ASP.NET MVC. Я начал с пустого шаблона проекта MVC в Visual Studio 2013. Позже я добавил необходимые файлы/пакеты и т. д. Но почему-то мне не удается интегрировать в него Swashbuckle. Каждый раз, когда я запускаю этот код, выдает следующую ошибку в SwashConfig.cs.

Конфигурация Swashbuckle

Ниже мой web.config

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <system.web>
    <compilation debug="true" targetFramework="4.6" />
    <httpRuntime targetFramework="4.6" />
  </system.web>
<system.webServer>
    <handlers>
      <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
      <remove name="OPTIONSVerbHandler" />
      <remove name="TRACEVerbHandler" />
      <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
    </handlers>
  </system.webServer></configuration>

package.config

<?xml version="1.0" encoding="utf-8"?>
<packages>
  <package id="Microsoft.AspNet.WebApi" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Client" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.Core" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.AspNet.WebApi.WebHost" version="5.2.3" targetFramework="net46" />
  <package id="Microsoft.Web.Infrastructure" version="1.0.0.0" targetFramework="net46" />
  <package id="Newtonsoft.Json" version="6.0.8" targetFramework="net46" />
  <package id="Swashbuckle" version="5.2.2" targetFramework="net46" />
  <package id="Swashbuckle.Core" version="5.2.2" targetFramework="net46" />
  <package id="WebActivatorEx" version="2.1.0" targetFramework="net46" />
</packages>

Global.asax.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Routing;
using System.Web.Security;
using System.Web.SessionState;

namespace CDE.API
{
    public class Global : System.Web.HttpApplication
    {

        protected void Application_Start(object sender, EventArgs e)
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);

            GlobalConfiguration.Configure(config => SwaggerConfig.Register(config));
        }
    }
}

WebApiConfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net.Http;
using System.Web.Http;
using Newtonsoft.Json.Serialization;

namespace CDE.API
{
    public static class WebApiConfig
    {
        public static void Register(HttpConfiguration config)
        {
            // Web API routes
            config.MapHttpAttributeRoutes();

            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{id}",
                defaults: new { id = RouteParameter.Optional }
            );

            var appXmlType = config.Formatters.XmlFormatter.SupportedMediaTypes.FirstOrDefault(t => t.MediaType == "application/xml");
            config.Formatters.XmlFormatter.SupportedMediaTypes.Remove(appXmlType);
        }
    }
}

SwaggerConfig.cs

using System.Web.Http;
using WebActivatorEx;
using CDE.API;
using Swashbuckle.Application;

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

namespace CDE.API
{
    public class SwaggerConfig
    {
        public static void Register(HttpConfiguration config)
        {
            var thisAssembly = typeof(SwaggerConfig).Assembly;

            config
                .EnableSwagger(c =>
                {
                    c.SingleApiVersion("v1", "CDE.API");
                    c.IncludeXmlComments(string.Format(@"{0}\bin\CDE.API.XML", System.AppDomain.CurrentDomain.BaseDirectory));
                    c.DescribeAllEnumsAsStrings();
                })
                .EnableSwaggerUi(c =>
                {
                });
        }
    }
}

RouteConfig.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace CDE.API
{
    public class RouteConfig
    {
        public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}"
            );
        }
    }
}

Что-то очень не так. Пожалуйста помоги.

Я использую:

Версия System.Web.Http

Версия System.Web.Http.WebHost


person Arnab Das    schedule 03.02.2016    source источник


Ответы (1)


Я думаю, что ваша ошибка может заключаться в том, что вы закомментировали эту строку кода в SwaggerConfig: -

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

Затем вы решили запустить эту строку кода после того, как RoutesConfig зарегистрирует все маршруты,

GlobalConfiguration.Configure(config => SwaggerConfig.Register(config));

Вам следует попробовать удалить указанную выше строку и разрешить запуск SwaggerConfig в PreApplicationStartup в соответствии с поведением по умолчанию.

Сообщение об ошибке для меня.. (Я использовал swagger только с веб-API) предполагает, что вы пытаетесь добавить маршруты для swagger to0 в конце конвейера.

Удачи.

person Derek    schedule 04.02.2016