Sono a un punto in cui ho davvero bisogno della documentazione API per il mio progetto WebAPI 2 e ho utilizzato il pacchetto NuGet di Swashbuckle 5. Fuori dalla scatola, posso colpire {myrooturl}/swagger e compare un'interfaccia utente, ma non ci sono controller, metodi o altro. Solo il titolo: [URL base: /EM.Services, versione api: v1]Swashbuckle 5 non riesce a trovare i miei ApiController
Ho dato un'occhiata ai documenti di Swashbuckle e, poiché sto usando OWIN che è ospitato da IIS, ho modificato SwaggerConfig con:
c.RootUrl(req => req.RequestUri.GetLeftPart(UriPartial.Authority) + req.GetRequestContext().VirtualPathRoot.TrimEnd('/'));
di cui al presente documento: https://github.com/domaindrivendev/Swashbuckle/blob/1326e753ce9b3a823b3c156b0b601134692ffc58/README.md#transitioning-to-swashbuckle-50
ho anche impostare la costruzione del progetto di generare i documenti XML e indicai il mio SwaggerConfig ad essa con:
private static string GetXmlCommentsPath()
{
// tried with an without the \bin
return String.Format(@"{0}\bin\EM.Services.XML", AppDomain.CurrentDomain.BaseDirectory);
}
Non sono sicuro che i documenti XML funzionanti/non funzionanti abbiano qualcosa a che fare con questo, dato che non ottengo assolutamente alcun controller sulla pagina swagger-ui.
Per quello che vale, tutto il mio controller eredita da un BaseController, che a sua volta eredita da ApiController.
C'è qualcosa di strano con il mio 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"));
}
miei controllori concreti sembrano tutti come questo (ho provato subbing fuori BaseController per ApiController e non v'è nessun cambiamento):
[RoutePrefix("api/whatever")]
public class FooController : BaseController
e il mio controller di base non fa molto (ancora) , ha solo un attributo:
[BuildClaims]
public abstract class BaseController : ApiController
La pagina vuota persiste utilizzando IIS Express o IIS completo.
Aggiornamento: Esempio di un controller inventato ho fatto che è davvero di base. Inoltre non si presenta, dato che ho ancora lo swagger del piatto della caldaia ui con niente in esso.
/// <summary>
/// I am a test
/// </summary>
[RoutePrefix("api/dummy")]
public class DummyController : ApiController
{
[HttpGet]
[Route("foo")]
public int Foo()
{
return 42;
}
}
Esiste un pacchetto di documentazione API che supporta questo scenario? Inoltre, ho creato un controller fittizio che eredita da ApiController come un normale controller, e che non appare nemmeno nel swagger ui. –
Non so se c'è un pacchetto API che lo faccia fuori dalla scatola. Se potessi pubblicare il codice per il controller fittizio o semplicemente caricare il tuo progetto da qualche parte potrei farlo risolverlo – gh9
dummy controller aggiunto –