#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, вот и все.