8

Ich habe eine bereits vorhandene MVC-Anwendung, die ich Web-API und Web API Self Documentation mit Nuget hinzugefügt. Während die Web-API-Controller einwandfrei funktionieren (gültige Antworten auf HTTP-Anfragen zurückgeben), findet der Help-Controller keine Web-API-Methoden zum Dokumentieren.ASP.Net-Web-API-Hilfe-Seite Bereich, der leere Ausgabe zurückgibt

In der Help-Controller-Indexaktion "Configuration.Services.GetApiExplorer(). ApiDescriptions" wird mit 0 Ergebnissen zurückgegeben.

Was bevölkerte ApiDescriptions und gibt es irgendwelche Konfigurationseinstellungen, die ich einstellen muss, um meine API zu Dokumentationen freizulegen?

Der Hilfebereich ist ein separater Bereich vom Rest meiner Anwendung. Führt das dazu, dass die Controller meine Controller nicht finden? Außerdem habe ich dem HelpController selbst eine Hilfe hinzugefügt, die noch keine API-Beschreibungen ergeben hat.

Ich habe auch spezielle Routing für meine API-Controller, so dass ich nicht sicher bin, ob das relevant ist.

Antwort

6

Nach weiterer Suche fand ich this post die auf this post bezieht sich auch

Wie schon im ersten Beitrag erwähnt, Glimpse die culplit ist, löste dieses Problem zu umgehen das Problem für mich:

<glimpse defaultRuntimePolicy="On" endpointBaseUri="~/Glimpse.axd"> 
<inspectors> 
    <ignoredTypes> 
     <add type="Glimpse.AspNet.Inspector.RoutesInspector, Glimpse.AspNet"/> 
    </ignoredTypes> 
</inspectors> 
</glimpse> 

Dies ist auch ein bekanntes Problem und die Problemumgehung wird auf dieser Glimpse GitHub Issue beschrieben.

+1

Dank für te Antwort, aber ich don Ich glaube nicht, dass ich einen Blick benutze! –

+0

Danke! Mein Problem wurde behoben. – Frans

2

Ich habe das gleiche Problem, und ich Glimpse nicht verwenden, und ich löse das Problem wie folgt aus:

In der ProjectName\Areas\HelpPage\Controllers\HelpController.cs Dateikommentar, weil die Konstrukteure nicht aufgerufen, die impliziten Konstruktor public HelpController() : this(GlobalConfiguration.Configuration) Standard der Konstruktor mit der aufgerufen wird, Parameter public HelpController(HttpConfiguration config) und diese Initialisierung der Configuration Eigenschaft ist incorect. Und Sie können dieses Problem so lösen:

Lösung 1: Kommentar/Entfernen Sie die Konstruktoren.

public class HelpController : Controller 
     { 
      private const string ErrorViewName = "Error"; 

    //  public HelpController() 
    //   : this(GlobalConfiguration.Configuration) 
    //  { 
    //  } 

    //  public HelpController(HttpConfiguration config) 
    //  { 
    //   Configuration = config; 
    //  } 

      /// <summary> 
      /// GlobalConfiguration By default 
      /// </summary> 
      protected static HttpConfiguration Configuration 
      { 
       get { return GlobalConfiguration.Configuration; } 
      } 

      public ActionResult Index() 
      { 
       ViewBag.DocumentationProvider = Configuration.Services.GetDocumentationProvider(); 
       return View(Configuration.Services.GetApiExplorer().ApiDescriptions); 
      } 
.... 

Lösung 2: den Standardkonstruktor injizieren durch dieses Attribut hinzufügen [InjectionConstructor].

public class HelpController : Controller 
    { 
     private const string ErrorViewName = "Error"; 

     [InjectionConstructor] 
     public HelpController() 
      : this(GlobalConfiguration.Configuration) 
     { 
     } 

     public HelpController(HttpConfiguration config) 
     { 
      Configuration = config; 
     } 

     /// <summary> 
     /// GlobalConfiguration By default 
     /// </summary> 
     protected static HttpConfiguration Configuration { get; private set; } 
.... 

Und Problem gelöst.

+0

Woher kommt der InjectionConstructor-Konstruktor?Einheit? –

+0

@ChrisMcKelt ja Chris von Unity – TotPeRo

+0

Lösung 1 funktionierte nicht für mich, weil sie eine Null-Referenz-Ausnahme verursachte. Lösung 2 funktioniert einwandfrei, solange Sie einen Verweis auf Microsoft.Practices.Unity hinzufügen. Offensichtlich ist das je nach Projekt akzeptabel oder nicht, aber in meinem Fall ist es so, danke für die Hilfe! –

1

Ich konnte dies lösen, indem ich GlobalConfiguration.Configure (WebApiConfig.Register); in meiner Application_Start() Methode hinzufüge. Da meine Anwendung OWIN verwendet, registrierte ich meine APIs nur unter Startup.Configuration (IAppBuilder app).

+0

Danke, das hat das Problem auch für mich gelöst. – aoakeson

0

Nach Hilfeseiten Paket von NuGet package manager Installation - Navigieren Sie zu WebApplication1\Areas\HelpPage\App_Start\HelpPageConfig.cs und Kommentar- der Zeile unter

config.SetDocumentationProvider(new XmlDocumentationProvider(
    HttpContext.Current.Server.MapPath("~/App_Data/XmlDocument.xml"))); 

Fügen Sie auch App_Data/XmlDocument.xml zu WebApplication> Eigenschaften> Erstellen> Überprüfen XML Dokumentationsdatei

+0

@Rohit Danke für die Formatierung –

Verwandte Themen