我想将我的解决方案分成至少两部分:
- 托管技术(初始化 Kestrel 并设置所有中间件,例如 swashbuckle、身份验证)
- 业务逻辑和用户界面
因为我希望在开发过程的后期阶段可以替换托管配置。
我试着简单地将所有包含 Controller 、模型和 View 的文件夹移动到一个单独的项目中,如下图所示:
托管配置和业务逻辑分离的两个项目:
所以我
- 将这些文件夹移动到 *.Implementation 项目
- 添加了对“Microsoft.AspNetCore.Mvc”包的 nuget 引用
- 从*.Host项目中引用了*.Implementation项目
- 将此类添加到 *.Implementation 项目中的“Controllers”文件夹:
using Microsoft.AspNetCore.Mvc;
namespace MyApp.Implementation.Controllers
{
public class ExampleController : Controller
{
public ActionResult<int> Index()
{
return 5;
}
}
}
如果我启动应用程序并打开 http://localhost:5000/example在我的浏览器中,我在浏览器中得到结果“5”。这向我表明托管技术在单独的项目中找到了我的 Controller 。
但是当我打开 http://localhost:5000在浏览器中,我收到一个异常页面,告诉我找不到 Home-Controller 的 View 。控制台还显示异常:
fail: Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddleware[1]
An unhandled exception has occurred while executing the request.
System.InvalidOperationException: The view 'Index' was not found. The following locations were searched:
/Views/Home/Index.cshtml
/Views/Shared/Index.cshtml
/Pages/Shared/Index.cshtml
既然虚拟主机找到了我的 Controller ,我希望它也能找到 View 。好像不是这样。
我如何告诉网络托管服务商去哪里寻找 View ?还是我需要对它们做任何事情?
最佳答案
除了Kirk Larkin的评论要看Application Parts in ASP.NET Core ,您可能还想查看 Razor Class Libraries .
我自己还没有尝试过,但看起来它可能会为您的问题提供解决方案。
关于c# - ASP.NET核心MVC : split hosting and business-logic/ui into separate projects,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55920700/