Swashbuckle 5.4.0 с ASP.NET MVC WebAPI — на веб-странице swagger не отображается документация

#c# #asp.net-mvc #asp.net-web-api #swagger #swashbuckle

#c# #asp.net-mvc #asp.net-web-api #swagger #swashbuckle

Вопрос:

В настоящее время я пытаюсь использовать Swashbuckle 5.4.0 в моем ASP.NET Приложение MVC Web API. Всякий раз, когда я захожу на страницу, созданную swagger (через rooturl / swagger), страница загружается правильно, но никакие методы не отображаются. Сравнивая мой проект с другим, который работает правильно, я могу найти любую разницу в коде. Чего мне не хватает?

Вот файлы .cs, связанные с проблемой:

SwaggerConfig.cs:

 namespace WebApiExperiment
{
    public class SwaggerConfig
    {
        public static void Register()
        {
            var thisAssembly = typeof(SwaggerConfig).Assembly;

            GlobalConfiguration.Configuration.EnableSwagger(c =>
            {
                c.SingleApiVersion("v1", "Swagger Demo Api");
                c.IncludeXmlComments(string.Format(@"{0}binWebApiExperiment.XML",
                                     System.AppDomain.CurrentDomain.BaseDirectory));
            })
                    .EnableSwaggerUi();
        }


    }
}
  

Startup.cs

 [assembly: OwinStartupAttribute(typeof(WebApiExperiment.Startup))]
namespace WebApiExperiment
{
    public partial class Startup
    {
        public void Configuration(IAppBuilder app)
        {
            ConfigureAuth(app);
        }
    }
}
  

Global.asax

 namespace WebApiExperiment
{
    public class MvcApplication : System.Web.HttpApplication
    {
        protected void Application_Start()
        {
            GlobalConfiguration.Configure(WebApiConfig.Register);
            AreaRegistration.RegisterAllAreas();
            FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
            RouteConfig.RegisterRoutes(RouteTable.Routes);
            BundleConfig.RegisterBundles(BundleTable.Bundles);
        }
    }
}
  

HomeController.cs (самый простой и тупой контроллер в моем проекте)

 namespace WebApiExperiment.Controllers
{
    public class HomeController : ApiController
    {


        public IHttpActionResult Index(SendCodeViewModel sendView)
        {
            return Ok();
        }

        public IHttpActionResult About(SendCodeViewModel sendView)
        {

            return Ok("Your application description page.");
        }

        public IHttpActionResult Contact(SendCodeViewModel sendView)
        {


            return Ok("Your contact page.");
        }
    }
}
  

Для любого файла просто дайте мне знать, и я предоставлю вам.

Ответ №1:

Краткий ответ: Маршрутизация имеет значение. Как swagger может генерировать документацию без знания маршрутизации в вашем API?

Попробуйте это:

 namespace WebApiExperiment.Controllers
{
    [RoutePrefix("api/routingMatters")]
    public class HomeController : ApiController
    {
        [Route("magic")]
        public IHttpActionResult Index(SendCodeViewModel sendView)
        {
            return Ok();
        }
        [Route("magic2")]
        public IHttpActionResult About(SendCodeViewModel sendView)
        {

            return Ok("Your application description page.");
        }
        [Route("magic3")]
        public IHttpActionResult Contact(SendCodeViewModel sendView)
        {
            return Ok("Your contact page.");
        }
    }
}
  

Комментарии:

1. Да, это работает! Спасибо! Какую часть документа я пропустил?

2. @Gab трудно сказать, это больше похоже на то, что ваш API даже не был API. Маршрутизация является частью базовой реализации WebAPI. Я предполагаю, что вы использовали контроллеры до ApiControllers, и это причина. Поэтому попробуйте прочитать руководство по WebAPI, тогда все будет ясно. Swashbucle получает все общедоступные методы API, вот и все.