原文:Asp.Net MVC5入门学习系列②
添加一个Controller(控制器)
因为我们用的是Asp.Net MVC,MVC最终还是一套框架,所以我们还是需要遵循它才能玩下去,或者说是更好的利用来便于我们的开发,要是对MVC概念还有点模糊的,可以去我以前写的第一话 Asp.Net MVC 3.0【Hello World!】里开始部分就对此做了阐述。假定所有跟我一起学的都了解MVC的这么一个概念,我们就开始下面的步骤了:
现在我们开始添加一个Controller,具体如下:
我们选择创建一个空的Controller,然后点击确定:
这里需要给Controller取一个名字,我这里就老一套了叫HelloWorld,然后点击确定如下图:
这里自带了一个返回View()的动作(action),说的绕口就是说这里VS在给我们创建Controller的时候会生产一个返回试图的方法,该方法没有任何操作动作就是接受HTTP GET请求HelloWorld过来执行该方法。要是你细心的话你会发现在VS我们创建HelloWorldController同时,它默默的在Views文件下为我们默默的创建了一个HelloWorld的文件夹,这样V C在某种机制上是不是对应起来了,这也是一种框架约定。
OK,我们简单的玩下这个我们创建好的Controller,具体代码如下:
这里随便写了2个方法,当然我返回的是一段字符串,然后我们在浏览器模拟HTTP去请求我们的HelloWorldController里面我们写的放回字符串的方法,看它是否会相应我们的发起的请求,我们运行起来我们的程序如下:
然后我们开始模拟HTTP开始请求我们的写的HelloWorldController,具体操作如下图:
我们请求它看是否能返回我们需要的字符串打印到浏览器上,结果如下:
HelloWroldController响应了我们的请求,并且把字符串返回回来打印到浏览器并且我们来检查下我们发起请求的方式不是不是GET,利用火狐的开发人员工具我们可以清楚的看到请求方式:
其实通过上面这个过程我们就可以在此清楚的看到MVC强大的路由机制,这个我好像也说过好多次了o(^▽^)o,不过MVC就是在这个地方强势耶,所以想学好MVC的话还是要多去了解下它路由机制方面的东西,本菜鸟也是入门就不说的那么高深了,来看看VS在给我们创建应用程序的时候,框架自身配置的路由,大多数情况这个自身配置路由是够我们的应用开发的。来看看项目的RouteConfig.cs配置文件,他位于项目的位置如下:
其实我们刚才模拟HTTP请求HelloWorldController的动作就经典的执行了下上面配置文件的配置。当我们请求HelloWorld时路由机制会将我们的请求映射到HelloWorldController类(控制器),根据上面配置文件配置描述的话,第二个URL片段上应该是action(动作/方法)也就是方法名,当然你会问我刚才就没有访问Index这个方法,为什么结果会是index方法的字符串怎么不是welcome方法的返回的字符串。这里呢我就个人观点说下,不对的话还望各位朋友指教!因为我们没有给它指定Controller里action的名字(方法),所以这里路由机制会字段检索默认方法,这里就检索到index这个方法。同时这也是为什么我们每次创建一个Controller的时候它都会自动给我们创建一个默认的动作方法,这个地方或许就是它的作用之一吧。。。。。。好了就啰嗦这么多,然后我们在继续模拟HTTP请求下我们的第二个方法,看能不能返回我们想要的字符串,请求访问结果如下:
当我们请求Welcome()方法时候,返回了我们想要得到的字符串打印到页面。同时还想说明下,同样的HTTP模拟请求,两个方法都是GET请求,你们认为那个方法的执行速度快呢?
哈哈当然是第二了,这里有人会问为什么,因为第二指定了Action名称(方法名称)所有路由机制根据你提供的方法名字就直接去找了,而第一个路由机制有一个检索或者说检查的动作在里面可能在细微上就要稍微慢于第二个方法了,我们看看第二的工作人员工具里返回的信息如下:
在粒度细节上是不是说明了上面的问题。这个纯属个人观点。
我们可以把我们的welcome()方法稍稍修改下,修改如下:
然后我们在模拟Http拼链接和参数请求该方法,看是否能达到我们预期的目的,操作如下:
这样的拼链接请求是绝对OK的,但是这样人一眼都可以看出来我这个链接是穿参数过去访问方法,这个时候大多数人会说那你这也太垃圾了吧,太弱了吧!这个不是很容易被各种爆菊么!o(^▽^)o 其实我也绝对这么写垃圾,东西在地址栏是赤裸裸等待爆菊,这时怎么办啊!有朋友会站出来说简单啊我自己写一个加密解密类在传参数的时候加密在取参数的地方解密,可以这个做法是可以得,当然本菜鸟也搞过这种事情。但是我们现在用的是mvc,mvc可以自定义路由,这样的话,对于这种URL,我们可以可它配置一条机制,然后以后类似这种的URL都会按照我们的机制走岂不是更好,当然我以前的文章也有这方面的东西在里面,有兴趣的话可以翻翻。
我们现在开始来配置这么一条路由机制,在RouteConfig.cs里面配置哦,可不要随便拉个类以配置,随便配置的话也可以,那就是你要想办法让路由机制认识你的配置就行,我们就在RouteConfig.cs里面配置我们的路由机制,配置如下:
添加这么一条路由机制的话,我们再次来模拟HTTP请求下我们的Welcome()方法,大致如下:
这样的请求URL是不是就漂亮多了哈!不过我们的这个请求的和我们想要的不是一回事,我们给的24拿出来的是0,这里是因为我们这个welcome这里的参数写的有问题,我们简单的改下,改为如下代码:
然后我们在次模拟HTTP请求,请求结果如下:
OK,今天就暂时先分享到这里吧o(^▽^)o!