8

Mam już istniejącą aplikację MVC, do której dodałem interfejs Web API i samouczęści Web API przy użyciu Nuget. Podczas gdy kontrolery Web API działają poprawnie (zwracają poprawne odpowiedzi na żądania HTTP), kontroler pomocy nie znajduje żadnych metod Web API do dokumentowania.Strona pomocy ASP.Net Web API Strona zwracająca puste wyjście

W akcji kontrolera Pomoc akcji Index "Configuration.Services.GetApiExplorer(). ApiDescriptions" wraca z wynikiem 0.

Co zapełniło ApiDescriptions i czy są jakieś ustawienia konfiguracyjne, które muszę ustawić, aby odsłonić moje api do dokumentacji?

Obszar pomocy to oddzielny obszar od pozostałej części mojej aplikacji. Czy to powoduje, że element, który znajduje Kontrolerów, nie znajduje moich kontrolerów? Co więcej, dodałem nawet wycinek pomocy do samego HelpController, który nadal nie zawierał żadnych opisów API.

Mam również specjalne routing dla moich kontrolerów API, więc nie jestem pewien, czy to istotne.

Odpowiedz

6

Po kilka poszukiwania znalazłem this post który odnosi się również do this post

Jak wspomniano w pierwszym poście, Glimpse jest culplit, to obejście rozwiązać ten problem dla mnie:

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

To także znany problem i obejście tego problemu opisano na tej stronie: Glimpse GitHub Issue.

+1

Dzięki za te odpowiedzi, ale ja don Myślę, że używam przelotnego spojrzenia! –

+0

Dziękujemy! Naprawiono mój problem. – Frans

2

Mam ten sam problem i nie używam Glimpse i rozwiązać problem tak:

w pliku komentarzu ProjectName\Areas\HelpPage\Controllers\HelpController.cs konstruktorzy bo nie nazywa się niejawny konstruktor public HelpController() : this(GlobalConfiguration.Configuration) domyślny nazywa konstruktor z parametr public HelpController(HttpConfiguration config) i ta inicjalizacja właściwości Configuration jest niepoprawna. A ty możesz rozwiązać ten problem tak:

Rozwiązanie 1: Komentarz/Usuń konstruktorów.

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); 
      } 
.... 

Rozwiązanie 2: wstrzyknąć domyślnego konstruktora przez dodanie tego atrybutu [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; } 
.... 

I problem rozwiązany.

+0

skąd pochodzi konstruktor InjectionConstructor?Jedność? –

+0

@ChrisMcKelt yes Chris z Unity – TotPeRo

+0

Rozwiązanie 1 nie działa dla mnie, ponieważ powodowało wyjątek odwołania o wartości zerowej. Rozwiązanie 2 działa dobrze, o ile dodasz odwołanie do Microsoft.Practices.Unity. Oczywiście w zależności od twojego projektu może to być nie do przyjęcia, ale w moim przypadku jest to wielkie dzięki za pomoc! –

1

Udało mi się rozwiązać ten problem, dodając GlobalConfiguration.Configure (WebApiConfig.Register); w mojej metodzie Application_Start(). Ponieważ moja aplikacja używa OWIN, rejestrowałem moje API tylko w Startup.Configuration (IAppBuilder app).

+0

Dziękuję, to rozwiązało problem także dla mnie. – aoakeson

0

Po zainstalowaniu pakietu HelpPages z NuGet package manager - Przejdź do WebApplication1\Areas\HelpPage\App_Start\HelpPageConfig.cs i usuń poniższą linię

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

także dodać App_Data/XmlDocument.xml do webapplication> Właściwości> Budowa> Sprawdź XML Documentation Plik

+0

@Rohit Dzięki za formatowanie –

Powiązane problemy