Asp.Net Core Web应用程序(2)

通过调试,发现ConfigureServices函数的services.AddMvc()与Configure函数app.UseMvc()是成对的,即当我们把MVC服务添加到服务集合中,才能在后续的Configure方法里使用Mvc服务。

那么我们建立的是Web应用,为什么要添加Mvc服务呢?我们吧Mvc服务删除一下看看效果吧。

删除了Mvc服务后,我们会发现,网站启动起来了,但是并没有正常访问我们的主页。

重新添加回Mvc服务,我们再启动网站,查看下网站链接路径如下:

:1234/Indexp>

:1234/About

可以发现,这些路径是Mvc模式的路径,也就是说,Asp.Net Core Web应用程序也是用Mvc路由访问网址,所以,Mvc的服务是必须添加的。

Configure中,我们看到还使用了其他IApplicationBuilder的方法,不过这些方法我们即便注释掉,也不影响网站启动,所以我们暂时忽略他们,等用到在学习吧。

bundleconfig.json

故名思意,捆配置文件,感觉和mvc的BundleConfig.cs文件很像,打开看一下,可以确定了,就是mvc的捆配置文件。那也就是说,这个是没什么用的文件,因为大多数情况,我们不会进行捆配置。

appsettings.json

依然故名思意,应该是应用设置文件,这个名字很像,webconfig里的AppSetting节点,所以推断,它应该是个配置项目固定值的文件。

百度一下appsettings.json,发现有很多都是如何读取该文件内容的文章,那么,现在可以确定了,它就是个变量配置文件。

文件讲解完了,下面我们来看文件夹里的内容。

wwwroot

上门介绍过了,wwwroot是一个有特殊标记的文件夹。

打开wwwroot,我们会发现里面存储的是样式和图片。运行网站,在网站里查看下这些图片,会发现图片地址都很奇怪。

图片路径是/wwwroot/images/banner1.svg,但访问起来,却是:1234/images/banner1.svg。

也就是说,wwwroot路径会被省略,换一种说话,wwwroot会被放到网站根目录下。

我们在做个实验,新建个文件夹存储一些图片,运行网站访问,我们会发现,根本无法访问这些图片。

那么,我们可以得出结论了,wwwroot是Asp.Net Core Web应用程序唯一可以访问的资源文件夹。

Pages

打开Page文件夹,我们可以看到4个可以展开的cshtml和4个不能展开的cshtml文件。

打开我们最眼熟的_ViewStart.cshtml,双击进入,发现代码如下:

@{ Layout = "_Layout"; }

可以看到,ViewStart代码和MVC的ViewStart一样,那也就是说,这是个配置布局的文件了。

那么相对应的_Layout.cshtml我们也可以确定了,它就是个布局文件,那么,剩下两个cshtml文件,我们也可以推断出了,他们也是配置文件或者布局文件。

下面我们来看那4个可以展开的cshtml文件。

首先我们展开Index.cshtml文件,如下图:

Asp.Net Core Web应用程序

接着,我们双击Index.cshtml文件,发现里面就是普通的html+razor标记。

然后,我们再双击Index.cshtml.cs文件查看内容,得到代码如下:

public class IndexModel : PageModel { public void OnGet() { } }

通过项目结构我们可以判断,Index.cshtml.cs是Index.cshtml的一个后台文件。

但查看代码,却发现里面的类是个继承PageModel类的IndexModel,那它到底和Index.cshtml文件有什么关系呢?

我们先通过命名推测,IndexModel中包含Model关键字,所以他应该是与Index.cshtml文件有关的Model。

与Index.cshtml文件有关的Model?那不就是ViewModel了吗!!!

现在我们再回头仔细的看下Index.cshtml文件寻找线索。

我发现,该文件的前两行内容如下:

@page @model IndexModel

这是Mvc传递页面实体的写法,即IndexModel确实是Index.cshtml的实体。

那么,我们上面的推测就被证实了,Index.cshtml.cs文件就是Index.cshtml文件的ViewModel。

但Onget是什么呢?

我们依然通过命名推测,我推测它就是以前AspNet的PageLoad(页面导入时触发的函数)?

下面我们测试一下,修改代码如下:

public string title; <br>public void OnGet() { title = this.Request.Query["title"]; if (!string.IsNullOrWhiteSpace(title)) { ViewData["Title"] = title; } }

然后断点Onget方法。

接着我们访问:1234/index?title=kiba网址。

结果,我们的断点被命中了,标题也顺利设置成功。因此,我们的推测又成功了,OnGet就是我们之前的PageLoad方法。

结语
综上所述,我们对Asp.Net Core Web应用程序已经有了一定的了解,然后我得出了这样一个结论:

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wdsgzp.html