Caricamento e registrazione di controller API dalla libreria di classi in ASP.NET core

Caricamento e registrazione di controller API dalla libreria di classi in ASP.NET core

Forse stai sbagliando qualcosa. Quindi, ecco i passaggi per farlo funzionare.

  • Crea un nuovo progetto:Applicazione Web ASP.NET Core (.NET Core);
  • Scegli il modello dell'API Web;
  • Esegui il progetto e accedi ad "api/values" per assicurarti che funzioni;
  • Aggiungi un nuovo progetto alla soluzione denominata ClassLibrary:Class Library (.NET Core);
  • Elimina Class1.cs e crea una classe TestController.cs;
  • Aggiungi la dipendenza MVC nel project.json dal progetto ClassLibrary:

    "dependencies": {
      "NETStandard.Library": "1.6.0",
      "Microsoft.AspNetCore.Mvc": "1.0.0"
    },
    
  • Aggiorna il tuo TestController.cs in modo che sia così:

    [Route("api/[controller]")]
    public class TestController : Controller{
      [HttpGet]
      public IEnumerable<string> Get() {
        return new string[] { "test1", "test2" };
      }
    }
    
  • Aggiungi il riferimento a ClassLibrary nel tuo progetto WebAPI:fai clic con il pulsante destro del mouse su "Riferimenti"->"Aggiungi riferimento..." o aggiorna il tuo project.json in questo modo:

    "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-*"
    },
    
  • Aggiorna il tuo Startup.cs ConfigureServices metodo:

    public void ConfigureServices(IServiceCollection services) {
      services.AddMvc().AddApplicationPart(Assembly.Load(new AssemblyName("ClassLibrary")));
    }
    
  • Esegui di nuovo il progetto e accedi a "api/test";

non devi fare nulla di speciale in Startup.cs dell'app Web principale, deve solo fare riferimento alla libreria di classi.

L'unico trucco è che affinché i tuoi controller vengano scoperti, la tua libreria di classi deve fare riferimento direttamente a MVC nella sua sezione delle dipendenze del file project.json:

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

AGGIORNAMENTO:per l'app MVC non avevo bisogno di nulla di speciale nel mio avvio ma in una delle mie app API ne avevo bisogno forse perché utilizzavo il routing degli attributi.

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

dove CSharp.WebLib è il nome della mia libreria di classi