ASP.NET MVC6启程(一)

ASP.NET MVC6已出炉多时,但现在很多项目都还在使用MVC4,所以MVC6还未到火的时候,但是从各大新闻报纸媒体上都能或多或少的知道它是能够跨平台的,这也就弥补的ASP.NET一直以来的缺憾,所以我也开始加入研究MVC6的阵营中来,这一研究忽然发现有很多似曾相识的地方,又有很多令人拍案叫好的地方。下面我就从我刚开始接触MVC6时所遇到的问题入手,记录一下MVC6的一些基础应用。

1、打开VS2015创建ASP.NET Web Application项目。



图1

然后选择“ASP.NET 5 Template”下的“Empty”模板。为什么不选右边的“Web Application”?原因很简单,学一样新东西得从无到有开始学,如果一开始就被IDE蒙蔽的双眼,后面还如何前进?



图2

项目创建完成之后,我们会看到如下打开的文件:



图3

我们先不管它们是什么意思,先运行一下看看是个什么效果:



图4

结果就是这个样子,那么这个“Hello World!”是在哪个地方定义的呢,很明显它是在图3的第27行定义的,只要我们把那个地方的字符串改掉,页面就会输出不同的内容。也就是说“Configure”方法会在我们程序启动的时候被调用,那么又是谁调用的它?图3的第32行就是我们想找的Main方法,它就是程序的入口,至于它内部的实现机制,就得深入源码去研究了,为了不至于一开始就产生挫败感,研究源码的事放后面再说,先实现一个简单的小应用,找点成就感。这里我们只需要知道它是用来启动我们的Web应用的就行了。

接下来我们来看看MVC6项目结构(左侧),我这里拿它跟MVC4的结构(右侧)对比一下:



图5



图6

我惊奇的发现,MVC6的项目似乎没有文件夹了,那么真的是这样么?其实我们可以点开“wwwroot”这个节点,里面就出现了我们熟悉的“web.config”文件,也就是说“wwwroot”就是网站的根目录,我们的一些静态资源文件(css、js、image等)都应该放在这个目录下。那么我们的“Controllers”文件夹和“Views”文件夹去哪儿了呢?没有嘛,那就自己建一个呗,这还不简单?于是我们就先建这两个文件夹放着:



图7

注意:这俩文件夹应该建在项目的最外层,而不应该建在“wwwroot”文件夹下面。也就是说这俩文件夹应该跟“wwwroot”处于同一级。

然后,我们就在“controllers”文件夹上右键,然后“Add”-“New Item”,在弹出的对话框中先选择左侧导航的“Server-side”表示选择“服务器端”的项,然后从右侧出现的列表中选择“MVC Controller Class”,然后输入controller的名字添加。



图8

添加完成之后,VS会自动打开刚创建的controller文件,结果是这样的:



图9

?

啊!为什么会出现红色波浪线!因为“Controller”类并没有被解析出来,换句话说,我们还没引用MVC的包。引用MVC的包有两种方式,看个人喜好用哪种:

第一种:通过项目根目录下的“project.json”文件添加。打开该文件,我们会看到json格式的数据,我们找到“dependencies”节点,这里面定义的就是项目依赖的包。我们在里面做如下新增:



图10



图11

所以,添加完之后,应该是下面这个样子:

"dependencies": {    "Microsoft.AspNet.IISPlatformHandler": "1.0.0-rc1-final",    "Microsoft.AspNet.Server.Kestrel": "1.0.0-rc1-final",    "Microsoft.AspNet.Mvc": "6.0.0-rc1-final"}

第二种:通过包管理器。首先,在项目的“References”节点上右键,点击“Manage NuGet Packages...”,然后在右侧打开的选项卡的顶部选择“Browse”,然后在上面的搜索框中输入“mvc”,然后会发现很多列表,然后我们单击选择“Microsoft.AspNet.Mvc”这个项,与此同时右侧属性窗口会显示出可用的版本,当我们选择版本之后,点击右边的“Install”按钮安装即可。



图20

安装完之后,我们再来看看controller文件有没有被解析到:



图12

我们发现已经被很好的解析了,接下来我们像MVC4中创建视图一样,创建一个视图。如下:



图13

然后我们迫不及待的想跑一下,结果得到的是这个结果:



图14

为啥还是“Hello World!”,我的“OK”呢?有人可能觉得是我没把地址打完整,好,我打完整看看:



图15

结果还是这个,这是为什么呢?我们看下面这段代码:

app.Run(async (context) =>{    await context.Response.WriteAsync("Hello World!");});

我们这几次的输出都是由它在进行,那么它是什么?复杂的我先不说,现在我们就可以把它理解成一个实现“IHttpAsyncHandler”接口的实例,里面那个委托就是“ProcessRequest(HttpContext context)”方法,这下是不是稍微有些明白了?那么“app.Run(...)”又是做什么的呢?我们可以简单通过智能提示了解一下:



图16

智能提示说,这个方法,添加一个终端中间件处理委托到应用程序的请求管道里面。这是啥意思呢?我们可以用下面这个图来简单说明一下:



图17

所以如果不在IIS跟终端中间件之间拦截一下的话,输出始终都会是“Hello World!”。那么,我们该如何拦截呢?

我们可以在它之前再添加一个终端中间件:

app.Run(async context =>{    await Task.Run(() => { });});

app.Run(async (context) =>{    await context.Response.WriteAsync("Hello World!");});

这样一来,就啥也不会输出了。但是,这样做毫无意义,我们该如何把MVC的中间件添加上去呢?很简单,我们只需在前面添加如下代码,就能把MVC中间件给加上了。里面的路由参数我就不多说了,用过MVC4的应该都知道。

app.UseMvc(route =>{    route.MapRoute(        name: "default",        template: "{controller}/{action}",        defaults: new { controller = "home", action = "index" }    );});

接下来,我们再跑一下看看是不是成功了:



图18

报错了,说找不到服务,要通过IServiceCollection.AddMvc()添加服务,于是我们在Startup.cs文件里面找找,结果确实有个配置IServiceCollection的地方,然后我们把MVC服务添加进去,如下:

public void ConfigureServices(IServiceCollection services){    services.AddMvc();}

好,然后Rebuild刷新页面:



图19

结果发现OK了。有没有小小的激动一把,至于services.AddMvc()和app.UseMvc(...)之间到底是怎样的关系,以及布局页的使用,和数据访问我下次再说。

时间: 2024-08-07 04:24:05

ASP.NET MVC6启程(一)的相关文章

ASP.NET5 MVC6入门教学之一(自己动手)

等待微软开源大动作已经好几年了,终于ASP.NET 5发布了.今天给新手们写一个简单地教程,教你认识一下ASP.NET5 MVC6 1.安装kvm 首先,你需要以管理员权限打开cmd,执行如下的脚本: cd \windows\system32 @powershell -NoProfile -ExecutionPolicy unrestricted -Command "iex ((new-object net.webclient).DownloadString('https://raw.githu

[walkthrough] 在Asp.net MVC6 RC里使用NLog,并且把配置集成到config.json

说明一下:本文基于随visual studio 2015 RC公开的DNX1.0.0-beta4,git上最新的aspnet的开发版本已经发生了很大变化. 首先,理论部分看[汤姆大叔的博客] 解读ASP.NET 5 & MVC6系列(9):日志框架 实际上aspnet的开发人员已经在最近版的系统里开始集成nlog了. 本文的目的主要帮助大家理解aspnet mvc 6的框架. 新建工程 "NlogTest" 选“asp.net 5”的”web site”,  然后不要认证模块,

十分钟轻松让你认识ASP.NET MVC6

这篇文章说明下如何在普通编辑器下面开发mvc6应用程序. 首先安装mvc6的nuget包: 可以看到在project.json文件中添加了MVC6的引用: 1.使用中间件 在ASP.NET 5中,DI是强烈推荐使用的.所以.NET团队推出了一个可以适配主流.NET的IoC框架的DI组件(Microsoft.Framework.DependencyInjection). 在该组件中,有一个扩展方法AddMvc()来把MVC的Controller注入到容器中.通过UseMvc()来确认MVC相关的注

visual studio code, asp.net5, mvc6资料汇总

最近在试探性地跟随微软最新发布的一些产品,现列下某些挺好的文章和链接 code.visualstudio.com http://blogs.msdn.com/b/cesardelatorre/archive/2014/11/18/what-is-net-core-5-and-asp-net-5-within-net-2015-preview.aspx http://stephenwalther.com/archive/2015/02/24/top-10-changes-in-asp-net-5-

ASP.NET MVC自定义AuthorizeAttribute篇知识点讲解—登录限制

1.前言 a.微软对ASP.NET的开发从WebForm到MVC的转变,已经正式过去5,6个年头,现在WebForm和MVC也都越来越完善,小小算来我也已经工作了将近三年,从大学的时候学习ASP.NET WebForm,感觉这就是我们以后吃饭的技术,所以当时可劲的学习拖各种控件,学习做各种各样的小项目,但是没想到的是,从大学最后一学期参加实习开始到现在也就一直没有机会接触ASP.NET WebForm,基本也都是在用MVC开发.我并不是说MVC就比WebForm开发好或者什么的,我只是觉得他们都

Working with Multiple Environments(使用多个环境)

Working with Multiple Environments ASP.NET 5提高了跨多环境控制应用程序行为的支持.比如:开发,过度,生产.环境变量用来表明应用程序运行的环境,允许适当配置应用程序. In  this   article(在这篇文章中主要介绍的章节如下): • Development, Staging, Production • Determining the environment at runtime • Startup conventions Browse or

20160210,微软2月10日发布13个安全补丁

?? 大家好,我们是微软大中华区安全支持团队. 微软于北京时间2016年2月10日发布了13个新的安全公告,其中6个为严重等级,7个为重要等级,修复了Microsoft Windows.Microsoft Office..Net Framework.Adobe Flash Player.Internet Explorer和Microsoft Edge软件中的漏洞.其中MS16-014中修复的漏洞CVE-2016-0040和MS16-015中修复的漏洞CVE-2016-0039已经公开披露. 与此

给WebAPI的REST接口添加测试页面(三)

在前面的文章中,我介绍过了通过Swashbuckle在WebAPI中集成Swagger-UI.不过这种方式不适合于最新版的ASP.Net MVC6下的WebAPI,在网上搜了一下,发现了它还有一个专供ASP.Net MVC6 WebAPI使用的版本:https://github.com/domaindrivendev/Ahoy 新版本的使用也不复杂,首先在project.json中添加Swashbuckle的引用: 这里要添加6.0的版本,另外值得注意的地方是,由于目前ASP.Net MVC6有

上周热点回顾(2.2-2.8)

热点随笔: · 我们搞开发的为什么会感觉到累(施瓦小辛格)· (原)离开,只为更好的活着(衍悔)· 传播正能量——做一个快乐的程序员(缘生梦)· 一年之计在于春,2015开篇:PDF.NET SOD Ver 5.1完全开源(深蓝医生)· [PaPaPa]实现缓存决策 - 让你的缓存变的有智慧(寻找和谐)· .NET 匿名方法的BUG,请专家解答(王富贵)· 关于大型网站技术演进的思考(六)--存储的瓶颈(6)(夏天的森林)· [PaPaPa][需求说明书][V1.0](今晚打老虎.)· 你凌晨1