许多站点分为两个部分:
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
{
...
}
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>();
});
至于应用程序的其他需求,您可以注册所需的服务。
分离的应用程序:
但是,这种“简单”的方法可能会给您的应用程序带来过多的复杂性,因为它只是一个应用程序,但是例如身份验证,授权,日志记录或部署之类的东西可能有不同的要求。测试也可以不同。
此外,还必须确保在上游管理每个路由的访问和可见性。
由于这些原因和更易于理解的体系结构,在大多数情况下,我宁愿拆分项目。
遵循多层或什至是干净架构的方案(Microsoft doc here)将解决大多数问题。
应用程序之间的公共部分自然会位于公共层中,因为例如,它们将链接到业务逻辑或基础架构。然后,两个Web应用程序都可以引用所需的项目。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句