C# 从ASP.NET core中的类库加载和注册API控制器
我正在使用ASP.NET Core 1.0.1。我有以下几点C# 从ASP.NET core中的类库加载和注册API控制器,c#,asp.net-mvc,asp.net-core,asp.net-core-mvc,asp.net-core-webapi,C#,Asp.net Mvc,Asp.net Core,Asp.net Core Mvc,Asp.net Core Webapi,我正在使用ASP.NET Core 1.0.1。我有以下几点 使用“Microsoft.AspNetCore.Mvc”:“1.0.1”开发控制器的类库: 使用系统; 使用System.Collections.Generic; 使用System.Linq; 使用System.Threading.Tasks; 使用Microsoft.AspNetCore.Mvc; 命名空间CoreAPIsLibrary.Controllers { [路由(“api/[控制器]”)] 公共类值构造函数:控制器
- 使用
开发控制器的类库:“Microsoft.AspNetCore.Mvc”:“1.0.1”
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Threading.Tasks;
使用Microsoft.AspNetCore.Mvc;
命名空间CoreAPIsLibrary.Controllers
{
[路由(“api/[控制器]”)]
公共类值构造函数:控制器
{
公共字符串Get()
{
返回“值”;
}
//获取api/values/5
[HttpGet(“{id}”)]
公共字符串Get(int-id)
{
返回“值”;
}
//后api/值
[HttpPost]
公共作废帖子([FromBody]字符串值)
{
}
//将api/values/5放入
[HttpPut(“{id}”)]
公共void Put(int id,[FromBody]字符串值)
{
}
}
}
您不需要在主web应用程序的Startup.cs中执行任何特殊操作,它只需要引用类库
一个技巧是,要发现控制器,类库必须直接引用其project.json文件依赖项部分中的MVC:
"Microsoft.AspNetCore.Mvc": "1.0.*"
更新:对于MVC应用程序,我在启动时不需要任何特别的东西,但在我的一个api应用程序中,我确实需要它,可能是因为使用了属性路由
services.AddMvc()
.AddApplicationPart(Assembly.Load(new AssemblyName("CSharp.WebLib")))
;
其中CSharp.WebLib是我的类库的名称也许你做错了什么。因此,以下是实现这一目标的步骤
- 创建新项目:ASP.NET核心Web应用程序(.NET核心)李>
- 选择webapi模板李>
- 运行项目并访问“api/值”,以确保其正常工作李>
- 向名为ClassLibrary的解决方案添加新项目:类库(.NET Core)李>
- 删除Class1.cs并创建TestController.cs类李>
- 在ClassLibrary项目的project.json中添加MVC依赖项:
"dependencies": { "NETStandard.Library": "1.6.0", "Microsoft.AspNetCore.Mvc": "1.0.0" },
- 将TestController.cs更新为如下所示:
[Route("api/[controller]")] public class TestController : Controller{ [HttpGet] public IEnumerable<string> Get() { return new string[] { "test1", "test2" }; } }
"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-*" },
- 更新Startup.cs
方法:ConfigureServices
public void ConfigureServices(IServiceCollection services) { services.AddMvc().AddApplicationPart(Assembly.Load(new AssemblyName("ClassLibrary"))); }
- 再次运行项目并访问“api/测试”李>
法布里西奥·科赫
如果我在dotnet 5中发布启用修剪选项,它如何处理以下代码
尝试替换public void配置服务(IServiceCollection服务){ services.AddMvc().AddApplicationPart(Assembly.Load(新的AssemblyName(“ClassLibrary”)); }
fortypeof(valuescontoler).GetTypeInfo().Assembly
这不是有效的方法或扩展。我可以使用此方法。你能用完整的Startup.cs更新你的问题吗?试着在你的控制器中插入typeof(valuescontoler)。Assembly
。另外,尝试在应用程序的同一程序集中创建一个控制器,以确保MVC正常工作。我在程序集中创建了一个控制器,但没有正常工作。我没想到。怎么了?谢谢,法布里科。这正是我所做的,我的机器上有一些非常奇怪的东西,因为我在启动时做了一个更改,然后将它返回到问题中的代码,现在它工作了,但不知道原因。我希望我在几个小时前找到这个答案。这会节省我很多时间。有时它归结为特定的搜索词。很好。这与其他响应完全相同,您正在从类型返回完整的程序集。。。[Route(“api/[controller]”])
// 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(Namespace.SubNamespace.ControllerName).Assembly); ... }