首页 技术 正文
技术 2022年11月17日
0 收藏 391 点赞 2,313 浏览 4326 个字

ASP.NET5 Web应用程序结构

本文参考ASP.NET5 官方文档 Understanding ASP.NET 5 Web Apps,加入了一些个人理解,理解不对的地方希望大家能指出,互相学习。

ASP.NET 5 针对WEB编程引入了几个新的基本概念,理解这些概念对快速开发WEB应用来说很重要。或许这些这些概念对你来说不是新的,但是对那些使用ASP.NET 和 Visual Studio 进行传统的WEB应用开发的程序员来说,这些概念可能是新的。

本文主要内容包括:

  • ASP.NET 项目结构

  • Framework 运行时

  • project.json 文件

  • global.json 文件

  • wwwroot 文件夹

  • 客户端依赖管理

  • 服务端依赖管理

  • 应用程序启动

ASP.NET 项目结构

NET5 Web应用程序

跟之前的ASP.NET解决方案相比,ASP.NET 5 多了一个 Solution Items 文件夹,里边有一个global.json 文件,而 WEB 项目被放在一个 src 文件夹中。新的结构里有一个特殊的 
NET5 Web应用程序 文件夹,并增加了 NET5 Web应用程序 这样一个节点。
打开项目的根目录,发现增加了若干个新文件: bower.json, appsettings.json, gulpfile.js, package.json, project.json 和Startup.cs等。

NET5 Web应用程序
同时,细心的童鞋会发现 global.asax, packages.config, web.config 这些文件都不见了。在 ASP.NET之前的版本中这些文件保存了大量的应用程序配置信息。但在ASP.NET5,这些信息和逻辑已经被重构到了更小,更集中的文件里。

运行时目标框架

ASP.NET 5 可在两种运行时环境中工作:传统的.NET Framework 和新的 .NET Core,默认情况下,应用程序将使用 .NET Framework 的完整版本运行。但我们也可以选择使用 .NET Core 版本。
你可以在项目上 右键>属性 来查看当前项目使用的运行时。
NET5 Web应用程序

.NET Core— 是 .NET Framework 一个子集,是一个新的,模块化的(利用NuGet),跨平台的更小体积的运行时。使用 .NET Core 你可以为你的每一个应用程序部署其专有的.NET 运行时,也就是说你的应用程序将以部署的运行时版本运行,而不是以主机操作系统上安装的运行时版本运行。一个应用程序的运行时的版本可以和其他应用程序的运行时版本不同并且可以并行运行。如果有需要你可以更新某个应用程序的运行时,但不会影响其他的应用程序。这将使得应用程序部署和架构更新变得更加简单,而且较少影响运行在系统上的其他应用程序。

.NET Framework— 目前.NET Core的API较之完整的.NET Framework还有很多的不足,因此大多数传统的应用程序在ASP.NET 5 下只能使用完整版本的 .NET Framework运行,原因就是它们依赖的一些组件或类库在.NET Core 中还没有。 使用 .NET Framework 现有的应用程序和库将继续在运行时工作而不需要任何更改。

project.json 文件

这是 ASP.NET 5 新增的一个文件,它描述了项目的基本信息,依赖关系等。

NET5 Web应用程序

bower 和 NPM 的具体功能网上有很多介绍,这里不做详细描述。

服务器端依赖管理

在解决方案资源管理器的引用文件夹下详细展示了项目的引用项。这应该是大家比较熟悉的。不同点是它引用了两个目标框架:完整的 DNX 4.5.1和 DNX Core 5.0,每个目标框架都有各自的引用关系,并且通过图标可以区分出来引用的是一个组件还是一个NuGet 资源包或者是其它项目。这些依赖将在编译的时候进行检查,丢失的依赖项会从配置的NuGet包源(工具>NuGet包管理器>程序包管理器设置>程序包源)进行下载。

NET5 Web应用程序

应用程序启动

ASP.NET 5将程序分解为各种模块,这些模块可以按需单独的添加到WEB应用程序里边。这使得程序更加精简。 如果你使用空模板创建一个 ASP.NET 5 应用,你会发现 Startup.cs 文件只有简单的几行代码。 默认的WEB项目里 startup 类 把 configuration, MVC, EF, Identity services, logging, routes等处理程序连接起来. 它提供了一个很好的例子展示如何配置使用你的ASP.NET应用程序。startup 类 样例里边包含三个部分:构造函数,ConfigureServices和 Configure 
Configure 方法在ConfigureServices方法之后被调用,用于配置中间件

NET5 Web应用程序

public Startup(IHostingEnvironment env)
{
// Set up configuration sources.
var builder = new ConfigurationBuilder()
.AddJsonFile("appsettings.json")
.AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true); if (env.IsDevelopment())
{
// For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
builder.AddUserSecrets();
} builder.AddEnvironmentVariables();
Configuration = builder.Build();
}

NET5 Web应用程序

我们可以在构造函数里边看到应用是如何处理配置文件的。Configuration 是 startup 类的一个属性,配置信息可以从各种来源(如JSON、XML或环境变量)来获取,默认的模板中使用ConfigurationBuilder 通过appsettings.json 和环境变量信息来创建一个IConfiguration实例,您也可以编写自己的自定义configuration provider, 可参考 Configuration
ConfigureServices 方法被用来指定哪些服务被提供给应用程序使用。在默认的模板里添加了3种服务: EF, Identity 和 MVC ,这里你可以根据需要来添加自己的服务。

NET5 Web应用程序

public void ConfigureServices(IServiceCollection services)
{
// Add framework services.
services.AddEntityFramework()
.AddSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"])); services.AddIdentity<ApplicationUser, IdentityRole>()
.AddEntityFrameworkStores<ApplicationDbContext>()
.AddDefaultTokenProviders(); services.AddMvc(); // Add application services.
services.AddTransient<IEmailSender, AuthMessageSender>();
services.AddTransient<ISmsSender, AuthMessageSender>();
}

NET5 Web应用程序

Configure方法在ConfigureServices之后被运行时调用,在示例项目中,Configure 调用控制台来做日志。为开环境添加了几个有用的功能,添加了静态文件、身份和MVC路由的支持,注意,只在ConfigureServices 中添加身份 和 MVC 还不够,它们还需要通过调用Configure在请求管道中配置。

全选复制放进笔记NET5 Web应用程序

public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
loggerFactory.AddConsole(Configuration.GetSection("Logging"));
loggerFactory.AddDebug(); if (env.IsDevelopment())
{
app.UseBrowserLink();
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Home/Error"); // For more details on creating database during deployment see http://go.microsoft.com/fwlink/?LinkID=615859
try
{
using (var serviceScope = app.ApplicationServices.GetRequiredService<IServiceScopeFactory>()
.CreateScope())
{
serviceScope.ServiceProvider.GetService<ApplicationDbContext>()
.Database.Migrate();
}
}
catch { }
} app.UseIISPlatformHandler(options => options.AuthenticationDescriptions.Clear()); app.UseStaticFiles(); app.UseIdentity(); // To configure external authentication please see http://go.microsoft.com/fwlink/?LinkID=532715 app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}

NET5 Web应用程序

你能看到,配置哪些服务是可用的,以及如何配置请求管道这些都完全是由Startup类来完成,而不是使用 HTTP 模块和通过web.config来配置处理程序。更多的信息,请参阅应用程序的启动配置基本原理.

 分类: asp.net5

下一篇: ef添加字段
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,497
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,910
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,744
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,498
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,136
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,301