同一解决方案中的 ASP.NET Core 5 MVC/Razor Pages 和 Web API 项目

2024-04-23

许多网站分为两部分:

  • www.example.com: 公众MVC https://learn.microsoft.com/en-us/aspnet/core/mvc/overview?view=aspnetcore-5.0 / 剃刀页面 https://learn.microsoft.com/en-us/aspnet/core/razor-pages/?view=aspnetcore-5.0为访客提供的服务器渲染应用程序
  • app.example.com: 私人WebAPI https://learn.microsoft.com/en-us/aspnet/core/web-api/?view=aspnetcore-5.0供客户和管理员使用的应用程序(可通过 SPA 访问)

这两个应用程序有很多共享的东西,例如代码、数据库、样式,因此最好将它们放在一个解决方案中,也可能分成多个项目。我希望可以通过某种方式调整标准配置来做到这一点(例如Startup.cs).

该文档不涵盖这种情况。这个问题有多种解决方案,但它们都是针对旧版本 https://stackoverflow.com/questions/39201152/how-to-use-mvc-controller-and-webapi-controller-in-same-project框架的。

ASP.NET Core 5 是如何做到这一点的?


我想说,您可以通过不同的方式来做到这一点,具体取决于您的需求以及您想要如何设计解决方案的架构、测试、部署过程等。


仅有一个应用程序

您可以通过简单的方式在同一个 Web 项目中公开 Web API 和具有前端的应用程序。 然后,例如,通过映射控制器,您可以指定哪个是哪个。

  • API控制器支架示例:
[ApiController]
[Area("api")]
[Route("[area]/[controller]")]
public class ResourceController : ControllerBase
{
    ...
}
  • WebApp控制器支架示例:
public class FeatureController : Controller
{
    ...
}

(请注意,MVC 控制器需要Controller基类。对于 API 控制器,ControllerBase足够。)

关于Startup对于应用程序来说,在控制器和路由之间执行默认映射可能就足够了:

app.UseEndpoints(endpoint =>
{
    endpoint.MapDefaultControllerRoute();
});

通过这种方法,您甚至可以根据路线映射不同的中间件类:

app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
   {
       appBuilder.UseMiddleware<ApiRelatedMiddleware>();
   })
   .UseWhen(context => !context.Request.Path.StartsWithSegments("/api"), appBuilder =>
   {
       appBuilder.UseMiddleware<FrontEndRelatedMiddleware>();
   });

至于应用的其他需求,您可以注册您需要的服务。


分离的应用程序:

但是,这种“简单”方法可能会给您的应用程序带来过多的复杂性,因为它只是一个应用程序,但身份验证、授权、日志记录或部署等内容可能有不同的要求。测试也可能有所不同。

此外,还必须确保上游管理每条路线的访问和可见性。

出于这些原因以及为了更易于理解的架构,在大多数情况下,我更愿意拆分项目。

遵循多层甚至干净的架构方案(微软文档在这里 https://learn.microsoft.com/en-us/dotnet/architecture/modern-web-apps-azure/common-web-application-architectures)可以解决大部分问题。

应用程序之间的公共部分自然会位于公共层中,因为它们将链接到例如业务逻辑或基础设施。然后,两个 Web 应用程序都可以引用所需的项目。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

同一解决方案中的 ASP.NET Core 5 MVC/Razor Pages 和 Web API 项目 的相关文章

  • 如何在Jenkins上更改工作空间并建立记录根目录?

    我希望将 Jenkins 的数据写入驱动器 E 因为这是服务器上的大型驱动器 Jenkins 本身安装在 C 上 我怎么做 我看到的默认配置是 工作区根目录 ITEM ROOTDIR 工作区 构建记录根目录 ITEM ROOTDIR 构建
  • 在 selenium webdriver 中打开一个新窗口而不是新选项卡

    当在我的应用程序中手动单击链接时 它会在 Chrome 和 IE 中的新选项卡中打开 但是 当我的脚本运行时 该链接会在 IE 中的新窗口而不是新选项卡中打开 相同的脚本在 Chrome 中按预期运行 知道如何摆脱这个吗 更改 IE 的默认
  • 以 UTF8 而不是 UTF16 输出 DataTable XML

    我有一个 DataTable 我正在使用 WriteXML 创建一个 XML 文件 尽管我在以 UTF 16 编码导出它时遇到问题 并且似乎没有明显的方法来更改它 我了解 NET 在字符串内部使用 UTF 16 这是正确的吗 然后 我通过
  • 正则表达式 - 匹配不包含字符串的模式

    我对正则表达式很陌生 并且一直在寻找方法来做到这一点 但没有成功 给定一个字符串 我想删除以 abc 开头 以 abc 结尾且中间不包含 abc 的任何模式 如果我做 abc abc abc 它将匹配以 b 开头 以 abc 结尾并且中间包
  • 我如何用 javascript/jquery 进行两指拖动?

    我正在尝试创建当有两个手指放在 div 上时拖动 div 的功能 我已将 div 绑定到 touchstart 和 touchmove 事件 我只是不确定如何编写这些函数 就像是if event originalEvent targetTo
  • 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同

    System Net WebException 服务器响应 PASV 命令返回的地址与建立 FTP 连接的地址不同 在 System Net FtpWebRequest CheckError 在 System Net FtpWebReque
  • Android 的代码覆盖率[重复]

    这个问题在这里已经有答案了 可能的重复 Android测试代码覆盖率 Eclipse https stackoverflow com questions 3282702 android test code coverage eclipse
  • 关闭扫描仪是否会影响性能

    我正在解决一个竞争问题 在问题中 我正在使用扫描仪获取用户输入 这是 2 个代码段 一个关闭扫描器 一个不关闭扫描器 关闭扫描仪 import java util Scanner public class JImSelection publ
  • UWP 应用程序在与商店关联后崩溃

    我正在为 Windows 创建一个 cordova 应用程序 将应用程序与商店关联后 应用程序起始页变为白色空白 如果应用程序使用包标识名称 com something moretext 则该应用程序可以正常工作 但我的商店包身份名称是 5
  • 防止 Ada DLL 中的名称损坏

    有没有一种简单的方法可以防止在创建 Ada DLL 时 Ada 名称被破坏 这是我的 adb 代码 with Ada Text IO package body testDLL is procedure Print Call is begin
  • Swift 中的 quitFirstResponder

    我怎样才能用Apple的新语言实现它 Objective C 代码 void touchesBegan NSSet touches withEvent UIEvent event for UIView view in self view s
  • 纯旧 PHP 对象 (POPO) 一词的确切含义是什么?

    我想了解一下波波 我搜索了 popo 发现它代表 Plain Old Php Object 但我不确定 Plain Old Php Object 的确切含义 我想知道什么是 popo 以及在哪里使用它 谢谢 普通旧 在此处插入语言 对象是一
  • 文本处理问题:删除其中一列不包含特定值的行

    我有一个制表符分隔的文件 如下所示 input sequence match sequence score receptor group epitope antigen organism ASRPPGGVNEQF ASRPPGGVNEQF
  • 如何用LoaderManager自动重新查询

    我有一个应用程序显示来自 SQLite DB 的数据 并且数据不断变化 所以显然 我认为我应该使用 LoaderManager 来显示数据 我读过一些关于将 LoaderManager 与 SQLite 结合使用的内容 然后看到了亚历克斯
  • C#中为线程指定特殊的cpu

    我有 2 个线程 我想告诉其中一个在第一个 cpu 上运行 第二个在第二个 cpu 上运行 例如在具有两个 cpu 的机器中 我怎样才能做到这一点 这是我的代码 UCI UCIMain new UCI Thread UCIThread ne
  • JavaScript 中“键”的类型是什么?

    当我失去焦点并开始思考一个愚蠢的问题时 我遇到了这样的时刻 var a b value b 的类型是什么 我的意思不是 值 的类型 而是标记为 b 的实际键 背景 当我必须创建一个字符串键时 我开始想知道这一点 var a b value
  • 从 Teradata sql Assistant 将结果导出到 Excel 工作表

    我想通过在 Teradata SQL Assistant 中运行查询将结果导出到 Excel 工作表中 我使用了复制粘贴 但没有用 提前致谢 如果您将答案返回到 SQL Assistant 您应该能够从 文件 菜单中选择 保存答案集 然后
  • RavenDB:为什么我会在此多重映射/归约索引中获得字段空值?

    受到 Ayende 文章的启发https ayende com blog 89089 ravendb multi maps reduce indexes https ayende com blog 89089 ravendb multi m
  • 如何使用 C# 以低分辨率形式提供高分辨率图像

    尝试使用 300dpi tif 图像在网络上显示 目前 当用户上传图像时 我正在动态创建缩略图 如果创建的页面引用宽度为 500x500px 的高分辨率图像 我可以使用相同的功能即时转换为 gif jpg 吗 将创建的 jpg 的即将分辨率
  • GAE 无法部署到 App Engine

    我正在尝试从 Eclipse 发布 Web 应用程序 我在 GAE 上创建了四个项目 可以通过登录我的帐户并查看控制台来查看它们 我已经改变了appengine web xml到项目的应用程序 ID 如果我将其更改为 GAE 上第一个创建的

随机推荐

  • 使用谷歌位置API在android中的onMapReady中获取当前位置

    我试图在我的应用程序内的谷歌地图上显示用户的当前位置 但我不想在用户移动时不断更新位置 应记录并显示他的初始位置 直到他关闭应用程序 我为此编写了以下代码 private GoogleMap mMap protected GoogleApi
  • WebApi 强制操作返回 xml

    我有这个动作 public IHttpActionResult SearchFor int aboItemType DTO FilterColumns filter Do stuff return Ok
  • 单页中可以有多个 html、head 和 body 元素吗

    我有多个页面被合并到一个页面中 其中一些单独的页面有自己的 html head 和 body 元素 拥有这些会对页面的性能产生不利影响吗 FireBug 中的 DOM 似乎是正确的 每个元素只有一个 第一 不要这样做 浏览器是very如果涉
  • 闪亮的 R 操作按钮控制反应元素

    不确定我是否应该使用这个术语 基本上 我有一个反应函数 可以显示用户上传的 CSV 文件 我想使用action button触发情节生成过程 此时此刻 情节总是即时生成的 所以我想知道 在renderPlot函数 如何让action but
  • 基于类的通用 UpdateView 内联

    我有以下型号 class Cv models Model name models CharField name max length 250 objective models CharField objective max length 2
  • 删除 Windows 窗体中的标题栏

    如何删除窗口窗体顶部的蓝色边框 我不知道它的确切名称 您可以设置属性FormBorderStyle对于设计师中的任何一个人来说 或者在代码中 this FormBorderStyle System Windows Forms FormBor
  • 在 Windows 上通过 pip 使用 fastmath(gmp 或 mpir)构建 PyCrypto

    我通过 pip 在 Windows 上安装了 PyCrypto 但无法构建 Crypto PublicKey fastmath 因为找不到 GMP 我知道有一个二进制版本虚空 http www voidspace org uk python
  • 如何在调度代码时自动选择R中googlesheets4中的预授权帐户?

    我试图弄清楚自动允许 googlesheet4 包选择我的预授权帐户来下载特定谷歌表格的方法是什么 例如 我想每天运行以下一次 library googlesheets4 delta lt read sheet https docs goo
  • 找出这样一座塔中尽可能多的人

    首先我们看一下问题 马戏团正在设计一种塔式表演 由人们站在彼此的塔顶上组成 肩膀 出于实用和美观的原因 每个人都必须比他或她下面的人矮且轻 给定马戏团中每个人的身高和体重 编写一个方法来计算最大可能的人数 在这样的一座塔里 EXAMPLE
  • React.lazy() 与 Typescript

    我收到错误 Element 类型中缺少属性 default 但类型中需要属性 default 默认 组件类型 ts 2322 React lazy gt import i18n locales this props lang then o
  • 使用 corona sdk 验证电子邮件地址

    在我的项目中 有一个供用户填写详细信息的表单 其中有一个文本字段用于输入用户的电子邮件 ID 所以我需要在 corona 项目中验证该文本字段中的电子邮件 试试这个正则表达式 local email email protected cdn
  • ImportError:无法从“tensorflow.python.keras.engine”导入名称“network”

    尝试使用 anaconda 环境导入在 Tensorflow 2 3 0 上运行的 tf agents environments 时出现此错误 尝试重新安装tensorflow 仍然出现同样的错误 以管理员身份运行 jupyter 笔记本
  • Maven:经常从远程存储库下载元数据 xml 文件

    我正在使用 Maven 来处理 Java 项目 我认为只有在第一次编译时才需要互联网连接来从远程存储库下载所需的库 但每当我编译代码时 我都会收到几条下载消息 像这样的消息 Downloading http repo maven apach
  • CSS:将“float:right”元素移动到顶部(与列表的第一个元素对齐)

    我有一系列元素 最后一个元素有 css float left 我想将其显示在与第一个元素相同的高度 而不是显示在列表的底部 我无法更改 html 代码 因此它是列表中的最后一个 同时 我想将其保留在右侧 我怎样才能用CSS制作它 thank
  • JPA 枚举 ORDINAL 与 STRING

    可以使用以下任一方式在 JPA 中定义枚举 Enumerated EnumType ORDINAL or Enumerated EnumType STRING 我想知道这两个定义的优点和缺点是什么 我听说 ORDINAL 在 Eclipse
  • 为 AlertDialog 的进入和退出设置动画

    我必须滑入AlertDialog当它进入时 当它消失时 将其滑出 但它不是动画 那么如何让动画发挥作用呢 这是我所拥有的 public class SlideDialogFragment extends DialogFragment Ove
  • 将文件读入多维数组

    我想从文件中读取数字 n n 网格并将它们复制到多维数组中 一次一个 int 我有读取文件并将其打印出来的代码 但不知道如何获取每个 int 我认为我需要 splitstring 方法和空白分隔符 才能获取每个字符 但在那之后我不确定 我还
  • 创建子列表并从上一个列表中删除值

    我想在 Java 中创建一个子列表 并从上一个列表中删除子列表中的值 我的程序正确创建了子列表 但它没有从前一个列表中删除正确的值 My code for int i 0 i lt 4 i List sub new ArrayList pr
  • 在 django admin 中更改字段名称

    我正在自定义 django admin 我想更改字段的显示名称 我认为答案是here https docs djangoproject com en dev ref contrib admin 但我找不到它 感谢 Meta 类 我已经更改了
  • 同一解决方案中的 ASP.NET Core 5 MVC/Razor Pages 和 Web API 项目

    许多网站分为两部分 www example com 公众MVC https learn microsoft com en us aspnet core mvc overview view aspnetcore 5 0 剃刀页面 https