Ich folgte this bis zum XML-Dokument Teil, um Swagger-Dokumentation mit Swashbuckle zu erstellen. Es lassen sollte mir die Endpunkte über (in meinem Fall) lesen:Swagger UI zeigt nichts in Webapi
http://localhost:51854/swagger/ui/index
Leider kann ich sehen keine Endpunkte:
Irgendwelche Ideen, warum und wie diese zu beheben? Bitte beachten Sie, dass ich mein Webapi aus einem leeren Webapi-Projekt erstellt habe - vielleicht ist das das Problem. Etwas muss fehlen, aber ich bin mir nicht sicher, was ...
Ich habe jetzt den folgenden Code als die Ursache identifiziert. In Global.asax.cs:
var container = new XyzWebApiStructureMapContainerConfigurator().Configure(GlobalConfiguration.Configuration);
GlobalConfiguration.Configuration.Services
.Replace(typeof(IHttpControllerActivator),
new StructureMapHttpControllerActivator(container));
Einige Klassen:
public class XyzWebApiStructureMapContainerConfigurator
{
public IContainer Configure(HttpConfiguration config)
{
var container = new Container(new BlaWebApiRegistry());
config.DependencyResolver = new StructureMapDependencyResolver(container);
return container;
}
}
public class StructureMapDependencyResolver : StructureMapDependencyScope, IDependencyResolver, IHttpControllerActivator
{
private readonly IContainer _container;
public StructureMapDependencyResolver(IContainer container)
: base(container)
{
_container = container;
container.Inject<IHttpControllerActivator>(this);
}
public IDependencyScope BeginScope()
{
return new StructureMapDependencyScope(_container.GetNestedContainer());
}
public IHttpController Create(
HttpRequestMessage request,
HttpControllerDescriptor controllerDescriptor,
Type controllerType)
{
var scope = request.GetDependencyScope();
return scope.GetService(controllerType) as IHttpController;
}
}
PS:
Vereinfachte Steuerung Code:
[RoutePrefix("api/XYZ")]
public class BlaController : ApiController
{
private readonly ISomething _something;
public BlaController(ISomething something)
{
_something = something;
}
[Route("")]
[HttpGet]
public IHttpActionResult Resources([FromUri] BlaRequest blaRequest)
{
// something exciting
return Ok(returnObject);
}
}
PPS:
Weitere Code:
// WebApiConfig
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
//var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
// Global.asax.cs
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
GlobalConfiguration.Configure(WebApiConfig.Register);
GlobalConfiguration.Configuration.Formatters.Clear();
GlobalConfiguration.Configuration.Formatters.Add(new JsonMediaTypeFormatter());
var container = new XyzWebApiStructureMapContainerConfigurator().Configure(GlobalConfiguration.Configuration);
GlobalConfiguration.Configuration.Services
.Replace(typeof(IHttpControllerActivator),
new StructureMapHttpControllerActivator(container));
}
}
ÖPP:
{
swagger: "2.0",
info: {
version: "v1",
title: "Bla.Di.Bla"
},
host: "localhost:51854",
schemes: [
"http"
],
paths: { },
definitions: { }
}
Wie lauten die Namen Ihrer Controller-Klassen? Manchmal wird dies nur dadurch verursacht, dass die Klassen nicht mit "Controller" versehen sind. z.B. ProductController.cs usw. Weitere Details Ihrer Endpunkte, z. B. ob das Routing mit Attributrouting oder konventionsbasiertem Routing eingerichtet wird, sind ebenfalls hilfreich. – strickt01
@ strickt01 - danke. Ich habe einen Controller-Beispielcode hinzugefügt. – cs0815
Verwenden Sie OWIN? Wenn ja [könnte dies helfen] (http://stackoverflow.com/questions/31840165/swashbuckle-5-cant-find-my-apicontrollers). – strickt01