lon*_*nix 6 asp.net-core-mvc asp.net-core asp.net-core-webapi razor-pages asp.net-core-5.0
许多网站分为两部分:
www.example.com:供访客使用的公共MVC / RazorPages服务器渲染应用程序app.example.com:供客户和管理员使用的私有WebAPI应用程序(可通过 SPA 访问)这两个应用程序共享很多东西,例如代码、数据库、样式,因此最好将它们放在一个解决方案中,也可能分成多个项目。我希望可以通过某种方式调整标准配置(例如Startup.cs)来做到这一点。
该文档不涵盖这种情况。这个问题有多种解决方案,但它们适用于旧版本的框架。
ASP.NET Core 5 是如何做到这一点的?
我想说,您可以通过不同的方式来做到这一点,具体取决于您的需求以及您想要如何设计解决方案的架构、测试、部署过程等。
仅有一个应用程序
您可以通过简单的方式在同一个 Web 项目中公开 Web API 和具有前端的应用程序。然后,例如,通过映射控制器,您可以指定哪个是哪个。
[ApiController]
[Area("api")]
[Route("[area]/[controller]")]
public class ResourceController : ControllerBase
{
...
}
Run Code Online (Sandbox Code Playgroud)
public class FeatureController : Controller
{
...
}
Run Code Online (Sandbox Code Playgroud)
(请注意,MVC 控制器需要Controller基类。对于 API 控制器,这就ControllerBase足够了。)
对于应用程序来说Startup,在控制器和路由之间执行默认映射可能就足够了:
app.UseEndpoints(endpoint =>
{
endpoint.MapDefaultControllerRoute();
});
Run Code Online (Sandbox Code Playgroud)
通过这种方法,您甚至可以根据路线映射不同的中间件类:
app.UseWhen(context => context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
appBuilder.UseMiddleware<ApiRelatedMiddleware>();
})
.UseWhen(context => !context.Request.Path.StartsWithSegments("/api"), appBuilder =>
{
appBuilder.UseMiddleware<FrontEndRelatedMiddleware>();
});
Run Code Online (Sandbox Code Playgroud)
至于应用的其他需求,您可以注册您需要的服务。
分离的应用程序:
然而,这种“简单”的方法可能会给您的应用程序带来过多的复杂性,因为它只是一个应用程序,但身份验证、授权、日志记录或部署等内容可能有不同的要求。测试也可能有所不同。
此外,还必须确保上游管理每条路线的访问和可见性。
出于这些原因以及为了更易于理解的架构,在大多数情况下,我更愿意拆分项目。
遵循多层方案甚至干净的架构(此处为 Microsoft 文档)将解决大多数问题。
应用程序之间的公共部分自然会位于公共层中,因为它们将链接到例如业务逻辑或基础设施。然后,两个 Web 应用程序都可以引用所需的项目。
| 归档时间: |
|
| 查看次数: |
4501 次 |
| 最近记录: |