Я нахожусь в точке, где мне действительно нужна документация API для моего проекта WebAPI 2, и я использовал пакет Swashbuckle 5 NuGet. Из коробки я могу ударить {myrooturl}/swagger, и пользовательский интерфейс появляется, но нет контроллеров, методов или чего-то еще. Просто мой заголовок: [base url:/EM.Services, api version: v1]
Я просмотрел документы Swashbuckle, и поскольку я использую OWIN, который размещен в IIS, я модифицировал SwaggerConfig с помощью
c.RootUrl(req => req.RequestUri.GetLeftPart(UriPartial.Authority) + req.GetRequestContext().VirtualPathRoot.TrimEnd('/'));
в соответствии с этим документом: https://github.com/domaindrivendev/Swashbuckle/blob/1326e753ce9b3a823b3c156b0b601134692ffc58/README.md#transitioning-to-swashbuckle-50
Я также настраиваю сборку проекта для создания документов XML и указывал на свой SwaggerConfig:
private static string GetXmlCommentsPath()
{
// tried with an without the \bin
return String.Format(@"{0}\bin\EM.Services.XML", AppDomain.CurrentDomain.BaseDirectory);
}
Я не уверен, что рабочие документы XML не работают с ним, хотя я не получаю абсолютно никаких контроллеров на странице swagger-ui.
Для чего это стоит, весь мой контроллер наследует от BaseController, который, в свою очередь, наследуется от ApiController.
Есть ли что-то с моим WebApiConfig?
public static void Register(HttpConfiguration config)
{
config.SuppressDefaultHostAuthentication();
config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
config.Filters.Add(new ValidateModelAttribute());
config.Filters.Add(new BaseAuthenticationAttribute());
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
jsonFormatter.SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/html"));
}
Мои конкретные контроллеры выглядят так (я попытался подстроить BaseController для ApiController и нет никаких изменений):
[RoutePrefix("api/whatever")]
public class FooController : BaseController
и мой базовый контроллер не делает много (пока), просто имеет атрибут:
[BuildClaims]
public abstract class BaseController : ApiController
Пустая страница сохраняется с использованием IIS Express или полномасштабного IIS.
Обновление: Пример надуманного контроллера, который я сделал, действительно является основным. Он также не появляется, так как у меня все еще есть кусочек плиты утиля без ничего.
/// <summary>
/// I am a test
/// </summary>
[RoutePrefix("api/dummy")]
public class DummyController : ApiController
{
[HttpGet]
[Route("foo")]
public int Foo()
{
return 42;
}
}