c# - ASP.NET核心MVC : split hosting and business-logic/ui into separate projects

标签 c# asp.net-core .net-standard

我想将我的解决方案分成至少两部分:

  • 托管技术(初始化 Kestrel 并设置所有中间件,例如 swashbuckle、身份验证)
  • 业务逻辑和用户界面

因为我希望在开发过程的后期阶段可以替换托管配置。

我试着简单地将所有包含 Controller 、模型和 View 的文件夹移动到一个单独的项目中,如下图所示:

托管配置和业务逻辑分离的两个项目:

enter image description here

所以我

  • 将这些文件夹移动到 *.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/

相关文章:

c# - 如何以线程安全的方式更新控件

c# - 将数据行值与 if 中的字符串进行比较

c# - 在面板中添加新标签时出现 NullReferenceException

.net - 在 .NET Standard 项目中使用包引用后,如何恢复引用 packages.config 中的 Nuget 包?

asp.net-core - 当 ShowPii 设置为 true 时,IdentityModel 会记录哪些信息?

c# - 使用枚举从后端到前端(javascript)进行错误处理,我在哪里放置翻译?

c# - .NET 核心 2.2。尝试删除时如何摆脱此 HTTP 405 错误?

c# - asp.net core 2.0 发布生成大量 DLL

razor - 寻找在控制台应用程序中渲染 Razor cshtml 页面的最简单选项,无需任何 Web 服务器

wcf - 如何在 Xamarin.Forms 项目中使用 .netstandard 中的 WCF 服务?