Laden und Registrieren von API-Controllern aus der Klassenbibliothek im ASP.NET-Kern

Laden und Registrieren von API-Controllern aus der Klassenbibliothek im ASP.NET-Kern

Vielleicht machst du etwas falsch. Also, hier sind die Schritte, damit das funktioniert.

  • Erstellen Sie ein neues Projekt:ASP.NET Core-Webanwendung (.NET Core);
  • Wählen Sie die Web-API-Vorlage aus;
  • Führen Sie das Projekt aus und greifen Sie auf "api/values" zu, um sicherzustellen, dass es funktioniert;
  • Fügen Sie der Lösung ein neues Projekt mit dem Namen ClassLibrary hinzu:Klassenbibliothek (.NET Core);
  • Löschen Sie Class1.cs und erstellen Sie eine TestController.cs-Klasse;
  • Fügen Sie die MVC-Abhängigkeit in project.json aus dem ClassLibrary-Projekt hinzu:

    "dependencies": {
      "NETStandard.Library": "1.6.0",
      "Microsoft.AspNetCore.Mvc": "1.0.0"
    },
    
  • Aktualisieren Sie Ihre TestController.cs wie folgt:

    [Route("api/[controller]")]
    public class TestController : Controller{
      [HttpGet]
      public IEnumerable<string> Get() {
        return new string[] { "test1", "test2" };
      }
    }
    
  • Fügen Sie die Referenz zu ClassLibrary in Ihrem WebAPI-Projekt hinzu:Klicken Sie mit der rechten Maustaste auf "Referenzen" -> "Referenz hinzufügen ..." oder aktualisieren Sie Ihre project.json wie folgt:

    "dependencies": {
      "Microsoft.NETCore.App": {
        "version": "1.0.0",
        "type": "platform"
      },
      "Microsoft.AspNetCore.Mvc": "1.0.0",
      "Microsoft.AspNetCore.Server.IISIntegration": "1.0.0",
      "Microsoft.AspNetCore.Server.Kestrel": "1.0.0",
      "Microsoft.Extensions.Configuration.EnvironmentVariables": "1.0.0",
      "Microsoft.Extensions.Configuration.FileExtensions": "1.0.0",
      "Microsoft.Extensions.Configuration.Json": "1.0.0",
      "Microsoft.Extensions.Logging": "1.0.0",
      "Microsoft.Extensions.Logging.Console": "1.0.0",
      "Microsoft.Extensions.Logging.Debug": "1.0.0",
      "Microsoft.Extensions.Options.ConfigurationExtensions": "1.0.0",
      "ClassLibrary": "1.0.0-*"
    },
    
  • Aktualisieren Sie Ihre Startup.cs ConfigureServices Methode:

    public void ConfigureServices(IServiceCollection services) {
      services.AddMvc().AddApplicationPart(Assembly.Load(new AssemblyName("ClassLibrary")));
    }
    
  • Führen Sie das Projekt erneut aus und greifen Sie auf "api/test" zu;

Sie müssen in Startup.cs der Haupt-Webanwendung nichts Besonderes tun, es muss nur auf die Klassenbibliothek verwiesen werden.

Der einzige Trick besteht darin, dass Ihre Klassenbibliothek direkt auf MVC im Abhängigkeitsabschnitt der project.json-Datei verweisen muss, damit Ihre Controller erkannt werden:

"Microsoft.AspNetCore.Mvc": "1.0.*"

UPDATE:Für die MVC-App brauchte ich nichts Besonderes in meinem Startup, aber in einer meiner API-Apps brauchte ich es vielleicht, weil ich Attribut-Routing verwendete.

services.AddMvc()
            .AddApplicationPart(Assembly.Load(new AssemblyName("CSharp.WebLib")))
            ;

wobei CSharp.WebLib der Name meiner Klassenbibliothek ist