Laden und registrieren API Controller Klasse Aus Bibliothek in ASP.NET Kern
Ich bin mit ASP.NET Kern 1.0.1. Ich habe Folgendes
- Sie eine Bibliothek-Klasse verwendet
"Microsoft.AspNetCore.Mvc": "1.0.1"
zu entwickeln, um mein Controller:
HTML:
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)
{
}
}
}
Dies ist meine class library-Projekt.json:
{
"version": "1.0.0-*",
"dependencies": {
"Microsoft.AspNetCore.Mvc": "1.0.1",
"NETStandard.Library": "1.6.0"
},
"frameworks": {
"netstandard1.6": {
"imports": "dnxcore50"
}
}
}
- Asp.net Kern-Anwendung (Web-API-Vorlage), wird meine host-Controller und Referenz
die Klasse Bibliothek. Allerdings ist Es nie zuvor auf den break-Punkt in der
controller. Hier ist meine startup-Klasse in der web-Anwendung:
HTML:
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();
}
}
}
Ich auch überprüft, ob der controller injiziert wurde:
So, was fehlt?
- versuchen Sie ersetzen
typeof(ValuesContoller).GetTypeInfo().Assembly
fürtypeof(ValuesContoller).Assembly
- Dieser ist nicht gültig, eine-Methode oder-Erweiterung.
- Diese Methode für mich verfügbar ist. Können Sie aktualisieren Sie Ihre Frage mit Ihrem vollständigen Start.cs ?
- Versuchen Sie, legen Sie
[Route("api/[controller]")]
im controller. Auch, versuchen, einen Domänencontroller zu erstellen, die in der gleichen Versammlung der app um sicherzustellen, dass die MVC ist in Ordnung. - Ich habe einen controller erstellt, in der Versammlung selbst aber nicht arbeiten auch. Ich habe mir nicht vorstellen. Was ist das problem?
- Ich habe eine neue asp.net Kern (web-API) - Projekt getestet, ein controller in der gleichen assembly, es ist Arbeit. Dann löschte ich den Ordner Controller in der Web-App. und dann auf die Klasse library, und verändert die startup-Klasse der neuen Website. Aber es schlug nicht den controller noch. So, dies ist kein routing-Problem.
- Ich denke, dann machst du etwas falsch. Ich bin gonna post eine Antwort mit den Schritten, um diese Arbeit zu machen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vielleicht machen Sie etwas falsch. So, hier sind die Schritte, um diese Arbeit zu machen.
Fügen Sie das MVC-Abhängigkeit im Projekt.json aus der ClassLibrary-Projekt:
Aktualisieren Sie Ihre TestController.cs so sein:
Fügen Sie den Verweis auf ClassLibrary in Ihrem WebAPI-Projekt: mit der rechten Maustaste auf "Verweise"->"Verweis Hinzufügen..." und aktualisieren Sie Ihr Projekt.json-so:
Aktualisieren Sie Ihr Startup.cs
ConfigureServices
Methode:brauchen Sie nicht zu tun, nichts besonderes im Autostart.cs der Haupt-web-app, es muss nur den Verweis auf die Klasse library.
Das ein trick ist, die für Ihre Controller zu werden vor Ihrer Klasse library muss direkt auf MVC in seinem Projekt.json-Datei Abhängigkeiten Abschnitt:
UPDATE: für die MVC-app, ich brauche nichts besonderes in meiner Startup aber in einem meiner api-apps, die ich habe müssen es vielleicht, weil mit dem Attribut-routing.
wo CSharp.WebLib ist der name meiner Klasse Bibliothek