2

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:

enter image description here

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: { } 
} 
+0

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

+0

@ strickt01 - danke. Ich habe einen Controller-Beispielcode hinzugefügt. – cs0815

+0

Verwenden Sie OWIN? Wenn ja [könnte dies helfen] (http://stackoverflow.com/questions/31840165/swashbuckle-5-cant-find-my-apicontrollers). – strickt01

Antwort

0

Schaltet diese Zeile aus:

config.DependencyResolver = new StructureMapDependencyResolver(container); 

in der Klasse der Frage XyzWebApiStructureMapContainerConfigurator verursachte einige Probleme.

Hoffe das hilft jemand in der Zukunft.