前言
作为Windows下的开发者,我使用Core的机会几乎为零,但考虑到微软的战略规划,我觉得还是先了解Core为好。
目前,微软已经制定了两个框架,一个是。Net框架,另一个是Net Core。
新功能的更新几乎都是在Net Core的框架下进行的。
所以考虑到未来,一旦Core完善,微软肯定会放弃当前。NetFrameWork。
因此,一定是大势所趋。网络程序员集体改用Net Core。
让我们本着探索的精神来看看Asp.Net核心网的应用。
创建Asp.Net核心项目
首先,让我们创建一个Asp.Net核心网络应用项目,然后一起探索。
打开Visual Studio创建项目,选择Asp.Net核心web应用程序,如下图所示:
然后选择Asp.Net核心网应用程序,如下图所示:
然后我们得到了这样一个布局项目,如下所示:
可以看到项目中有四个文件和两个文件夹(Page,wwwroot)。
wwwroot文件夹非常特殊,图标与其他文件夹不同,但其名称仍然可以修改。修改名称后,文件夹图标会变回普通图标,但既然是特殊图标,就一定有特殊意义。我们稍后会研究它,然后先浏览Page文件夹。
页面文件夹展开后,发现里面有很多页面。因此,很明显,它是存储页面的地方。稍后我们将查看页面内容。现在,让我们先来看看项目最外层的四个文件。
Program.cs
看到这个文件我很惊讶。网站依赖于IIS部署,AspNet中没有Program。那么为什么Core中有一个额外的Program文件呢?让我们调查一下。
最初,AspNetCore有自己的服务器,叫做Kestrel。
什么是独立服务器?就像我们创建了一个WCF服务,但是我们不想把它挂在IIS上,所以我们构建了一个ServiceHost来挂这个服务。
但是,红隼显然更高级,它也可以与互联网信息服务(IIS)、Nginx或Apache等反向代理服务器结合使用。
什么是反向代理服务器?也就是说,类似于IIS的服务器首先从网络接收HTTP请求,然后将这些请求转发给红隼,最后红隼实现调用。呼叫流程如下图所示。
经过这里的调查,我大致能猜到Program.cs是做什么的。——应该是用来启动服务器红隼的。
现在我打开Program.cs,找到下面的代码。
公共静态IWebHost BuildWebHost(字符串[] args)=WebHost。CreateDefaultBuilder(args)。UseStartupStartup()。build();我个人觉得这段代码很无聊,是一个函数的速记,但是没有起到速记的作用,容易打扰初学者,所以我们做了如下修改:
公共静态void Main(字符串[]参数){ BuildWebHost(参数)。run();}公共静态IWebHost BuildWebHost(string[]args){ return WebHost。CreateDefaultBuilder(args)。UseStartupStartup()。build();}看修改后的代码,我们非常清楚,Main函数启动并调用BuildWebHost函数,因此得名,这是一个创建网站服务器的函数,返回值是IWebHost。
然后,我们可以看到Main函数使用BuildWebHost函数返回的IWebHost实例来执行它下面的Run方法。
在这一点上,很明显程序是用来启动服务器的。
Startup.cs
这个文件我们比较熟悉,项目启动时会调用。它有很多功能。让我们看看系统为我们生成的代码。
公共类Startup { public Startup(icon Configuration)配置){ Configuration=configuration}公共图标配置{ get} public void ConfigureServices(IServiceCollection services){ services。AddMvc();} public void Configure(IApplicationBuilder应用程序,IHostingEnvironment env) { if (env。IsDevelopment()) { app。UseBrowserLink();app。usedeveloper exception page();} else { app。UseExceptionHandler('/Error ');} app。UseStaticFiles();app。UseMvc();}}我们看到了三个功能。现在,我们只需打破这三个函数的断点并启动网站。
可以简单的得出三个功能的运行顺序是启动——配置服务——配置。
构造函数是一个简单的赋值,所以让我们跳过它,看看ConfigureServices。
你可以看到只有服务。在ConfigureServices中调用AddMvc()。根据官方介绍,最初的方法是将Mvc服务添加到指定的服务集中。
通过调试,发现服务。ConfigureServices函数的AddMvc()与app配对。Configure函数的UseMvc(),也就是当我们将Mvc服务添加到服务集中时,我们可以在后续的Configure方法中使用Mvc服务。
那么我们正在构建一个Web应用程序,那么为什么要添加Mvc服务呢?让我们删除Mvc服务并看看效果。
删除Mvc服务后,我们会发现网站启动了,但是我们没有正常访问我们的主页。
重新添加Mvc服务,然后启动网站。检查网站的链接路径,如下所示:
http://localhost:1234/Indexp
http://localhost :1234/关于
可以发现,这些路径都是Mvc模式的路径,也就是说,Asp.Net Core Web应用也是使用Mvc路由访问网站的,所以必须添加Mvc服务。
在Configure中,我们可以看到也使用了其他的IApplicationBuilder方法,但是即使我们对这些方法进行标注,也不会影响网站的启动,所以我们暂时忽略它们,等待学习。
bundleconfig.json
因此,包配置文件类似于mvc的BundleConfig.cs文件。打开就可以确认是mvc的捆绑配置文件。也就是说,这是一个无用的文件,因为在大多数情况下,我们不会配置包。
appsettings.json
还是一样的名字,不过应该是应用设置文件。这个名称非常类似于webconfig中的AppSetting节点,所以推断它应该是一个配置项值固定的文件。
百度看了一下appsettings.json,发现有很多关于如何读取这个文件内容的文章,所以现在可以确认是一个变量配置文件。
解释完文档后,让我们看看文件夹中的内容。
网站根目录
正如我们所介绍的,wwwroot是一个带有特殊标记的文件夹。
打开wwwroot,我们会发现它存储了样式和图片。运行网站,查看网站中的这些图片,你会发现图片的地址很奇怪。
映像路径为/wwwroot/images/banner1.svg,但访问时为http://localhost 33601234/images/banner 1 . SVG。
也就是说,wwwroot路径将被省略,换句话说,wwwroot将被放在网站的根目录中。
我们正在做一个实验,创建一个新的文件夹来存储一些图片,运行网站访问,我们会发现这些图片根本无法访问。
然后,我们可以得出结论,wwwroot是Asp.Net核心Web应用程序唯一可以访问的资源文件夹。
页
打开Page文件夹,我们可以看到四个可扩展的cshtml文件和四个不可部署的cshtml文件。
打开我们最熟悉的_ViewStart.cshtml,双击进入,发现代码如下:
@ { Layout=' _ Layout}如您所见,ViewStart代码与MVC的ViewStart相同,也就是说它是一个布局配置文件。
然后我们可以确认对应的_Layout.cshtml,这是一个布局文件。那么我们可以推断剩下的两个cshtml文件也是配置文件或者布局文件。
让我们看看四个可扩展的cshtml文件。
首先,我们展开Index.cshtml文件,如下图所示:
然后,我们双击Index.cshtml文件,发现里面有普通的html razor标签。
然后,我们双击Index.cshtml.cs文件查看内容,代码如下:
公共类索引模型:页面模型{public void on get () {}}从项目结构我们可以判断Index.cshtml.cs是Index.cshtml的后台文件.
然而,查看代码,发现里面的类是一个继承了PageModel类的IndexModel。它和Index.cshtml文件有什么关系?
我们首先通过命名猜测IndexModel包含关键字Model,因此它应该是一个与Index.cshtml文件相关的Model。
与Index.cshtml文件相关的模型?那不是视图模型吗!
现在让我们回去仔细看看Index.cshtml文件,寻找线索。
我发现文件的前两行如下:
@page@model IndexModel这是Mvc传递页面实体的方式,也就是IndexModel确实是Index.cshtml的实体.
然后,我们上面的推测得到了证实,Index.cshtml.cs文件就是Index.cshtml文件的ViewModel。
但是Onget是什么呢?
我们还是通过命名来猜测,我猜是之前AspNet的PageLoad(页面导入时触发的函数)?
让我们测试它并修改代码,如下所示:
公共字符串标题;brpublic void OnGet(){ title=this。请求。查询['标题'];if(!字符串。isnullorhitespace(Title)){ view data[' Title ']=Title;}}然后中断Onget方法。
然后我们访问http://localhost:1234/index?Title=kiba网站。
结果,我们的断点被命中,标题被成功设置。因此,我们的推测又成功了,OnGet就是我们之前的PageLoad方法。
结语综上所述,我们对Asp.Net核心网的应用有了一定的了解,然后我得出以下结论:
[Asp。Net Core Web Application]采用了MVVM的设计理念(cshtml.cs文件是我们【服务器】页面的ViewModel),请求URL使用了Mvc路径访问技术,整体来说是一个比较好的AspNet框架。
至此,Asp.Net对核心web应用的探索告一段落。
代码已经上传到Github。欢迎下载。
Github地址:https://github.com/kiba518/KibaAspNetCore
以上就是边肖介绍的Asp.Net核心Web应用——探索详解与整合,希望对大家有所帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!