J'utilise ASP.NET Core 1.0.1. J'ai le suivant
"Microsoft.AspNetCore.Mvc": "1.0.1"
afin de développer mes contrôleurs:using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
namespace CoreAPIsLibrary.Controllers
{
[Route("api/[controller]")]
public class ValuesContoller : Controller
{
public string Get()
{
return "value";
}
// GET api/values/5
[HttpGet("{id}")]
public string Get(int id)
{
return "value";
}
// POST api/values
[HttpPost]
public void Post([FromBody]string value)
{
}
// PUT api/values/5
[HttpPut("{id}")]
public void Put(int id, [FromBody]string value)
{
}
}
}
Voici le projet de ma classe libray.json:
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.AspNetCore.Mvc": "1.0.1",
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Extensions.Logging;
using System.Reflection;
using CoreAPIsLibrary.Controllers;
namespace APIsHost
{
public class Startup
{
public Startup(IHostingEnvironment env)
{
var builder = new ConfigurationBuilder()
.SetBasePath(env.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
}
public IConfigurationRoot Configuration { get; }
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddApplicationPart(typeof(ValuesContoller).GetTypeInfo().Assembly).AddControllersAsServices();
}
// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug();
app.UseMvc(routes =>
{
routes.MapRoute("default", "{controller}/{action}/{id}");
});
//app.UseMvc();
}
}
}
J'ai également vérifié si le contrôleur était injecté:
Alors, qu'est-ce qui manque?
Vous faites peut-être quelque chose de mal. Voici donc les étapes à suivre pour que cela fonctionne.
Ajoutez la dépendance MVC dans le project.json du projet ClassLibrary:
"dependencies": {
"NETStandard.Library": "1.6.0",
"Microsoft.AspNetCore.Mvc": "1.0.0"
},
Mettez à jour votre TestController.cs pour qu'il ressemble à ceci:
[Route("api/[controller]")]
public class TestController : Controller{
[HttpGet]
public IEnumerable<string> Get() {
return new string[] { "test1", "test2" };
}
}
Ajoutez la référence à ClassLibrary dans votre projet WebAPI: faites un clic droit sur "Références" -> "Ajouter une référence ..." ou mettez à jour votre project.json comme ceci:
"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-*"
},
Mettez à jour votre méthode Startup.cs ConfigureServices
:
public void ConfigureServices(IServiceCollection services) {
services.AddMvc().AddApplicationPart(Assembly.Load(new AssemblyName("ClassLibrary")));
}
vous n'avez rien à faire de spécial dans Startup.cs de l'application web principale, il suffit de référencer la bibliothèque de classes.
La seule astuce est que pour que vos contrôleurs soient découverts, votre bibliothèque de classes doit référencer directement MVC dans sa section des dépendances du fichier project.json:
"Microsoft.AspNetCore.Mvc": "1.0.*"
MISE À JOUR: pour l'application MVC, je n'avais besoin de rien de spécial dans mon démarrage, mais dans l'une de mes applications api, j'en avais besoin, peut-être parce que l'utilisation du routage d'attributs.
services.AddMvc()
.AddApplicationPart(Assembly.Load(new AssemblyName("CSharp.WebLib")))
;
où CSharp.WebLib est le nom de ma bibliothèque de classes