注:本例存在Controller名称重名情况,但ASP.NET Core MVC没有提供如ASP.NET中通过命名空间区别的方式区别Controller重名,本例通过修改名称解决问题,如需命名空间区分Controller可参考:https://stackoverflow.com/questions/34306891/restrict-route-to-controller-namespace-in-asp-net-core
过滤器迁移全局过滤器的配置则是由原来的通过FilterConfig对象注册改为Startup的ConfigureServices方法中对MVC进行配置:
依赖注入迁移
ASP.NET Core内置了依赖注入功能,甚至一些组件都提供了专门的拓展方法将其服务添加到容器中,如EFCore、Identity、MVC。
上图为ASP.NET Core默认的为将DbContext、Identity以及MVC相关服务添加到容器的代码,除此之外为了顺应依赖注入思想,这里将原有代码的仓储和服务类型均注册到容器中,其依赖通过构造方法进行注入。
仓储代码:
业务代码:
控制器代码:
服务注册代码:
注:本例中实现依赖的是实现而非抽象,这不符合依赖倒置原则,所以此处仅作为ASP.NET Core依赖注入使用示例。另外为了让EFCore支持MySQL,所以需要在项目中添加Pomelo.EntityFrameworkCore.MySql组件:
Web静态资源及View迁移
ASP.NET的页面是基于HTML实现的,一个ASP.NET的页面除了HTML代码外还会引用一些外部静态资源,如css、js、image、font等内容,而ASP.NET中专门提供了Bundle技术来管理这些资源(可参考:《ASP.NET没有魔法——ASP.NET MVC界面美化及使用Bundle完成静态资源管理》),那么ASP.NET Core是如何管理这些资源的呢?
首先要处理ASP.NET Core中静态文件的访问问题,在ASP.NET中由于它依赖IIS,而静态文件访问已经被IIS处理了,所以程序中无需关心,但ASP.NET Core不一样,需要在其请求管道中添加相应的处理中间件: