ASP.NET MVC和ASP.NET Core的区别?

总体来说:core mvc和mvc 存在显著的差异,但是可替换的nuget包缩小了这些差距,极少数情况需要第三方的包来解决。主要差距点如下:

  1. 启动上的差距:
    1. mvc 依赖一个模板方法 Global.asax,当收到第一个请求时,会调用 Application_Start方法,所有需要启动时运行的方法都在该方法中注册,如果使用OWIN或者Katana选项的话,会包含一个Startup.cs文件,该文件的作用和Global.asax一致。
    2. core mvc 使用单文件 Program.cs启动,并且简化了注册的模板方法,使用Builder .Use来注册各种中间件,使用Run来启动应用程序。
  2. 托管上的差距:
    1. mvc 托管在iis上,依赖iis的配置实现一些行为。
    2. core mvc 可以运行在不同平台的服务器上,内部默认包含了跨平台的Kestrel服务器。
  3. 静态文件托管
    1. mvc直接在应用中托管静态文件,目前大多数静态资源都走cdn以获取更好的性能和负载。
    2. core mvc 没有内置静态文件支持,需要依赖静态文件中间件,配置后在/wwwroot文件夹汇总提供服务。
  4. 依赖注入的支持
    1. mvc 中未提供默认的DI支持,可以通过第三方的 Autofac、Unity、Ninject、Castle等来实现。
    2. core mvc 默认支持DI,应用程序启动时调用 ConfigureServices方法来注册所有类型,当然也可以替换成第三方的DI包。
  5. 中间件、模块和处理程序
    1. mvc 内置了很多http模块,比如 身份验证和会话管理。
    2. core mvc 使用中间件来实现 身份验证和会话管理。
  6. 配置文件
    1. mvc 配置依赖配置文件 web.config 和 服务器的mechine.config,并存储在appsettings或者connectionStrings节点中,然后通过 ConfigurationManager 来访问。
    2. core mvc 使用标准的 ConfigureWebHostDefaults 方法,默认配置Json格式的文件,并且支持环境配置,appsetings.Development.json 在开发环境会替代 appsettings.json的内容。通过DI还可以通过IConfiguration接口来获取配置文件的内容。
  7. 路由的差异
    1. mvc 提供两个路由方式:路由表(RouteTable)和属性路由(RouteAttribute)
    2. core mvc 使用中间件UseRouting来开启,并使用UseEndpoints来注册路由规则(类似RouteTable的配置),同时也支持属性路由RouteAttribute。
  8. 日志差异
    1. mvc中没有内置的日志记录解决方案,需要引入第三方的log4net,NLog等
    2. core mvc内置了日志记录,通常使用注入ILogger接口的方式获取实例。
  9. 页面渲染
    1. mvc 使用razor视图来实现,使用ViewModel来传递对象。
    2. core mvc 使用 Razor Pages ,会将操作和viewmodel组合成一个类,并链接到视图。
  10. WebApi的差异
    1. mvc 和 webapi2 在属性路由和依赖注入方面类似,但是不完全一样。
    2. core mvc 中 mvc 和 webapi 没有任何区别
  11. 身份认证的差异
    1. mvc 中在 app_start文件夹中 Startup.Auth.cs 中配置
    2. core mvc 在中间件中配置,使用UseAuthentication 和 UseAuthorization 来实现认证和授权
  12. 标识的差别 与 11 类似
  13. Controller的差别
    1. mvc 和webapi 支持 Controller 和ApiController.
    2. core mvc不在支持 ApiController、System.Web.Http 命名空间和IHttpActionResult,使用 Controller基类和 ActionResult
  14. Razor 语法层面的提升
  15. SignalR的一些提升
  16. 一些单元测试能力提供的提升
    以上引用自微软文档:ASP.NET MVC 和 ASP.NET Core 之间的体系结构差异

你可能感兴趣的:(asp.net,mvc,后端)