zoukankan      html  css  js  c++  java
  • MVC5(二)

    Route使用和扩展

      Route:路由,MVC项目在创建时会在App_Start文件夹下自动创建RouteConfig.cs类,在RouteConfig.cs类中创建路由规则匹配,在Global.asax里注册路由。

    MVC项目注册路由的顺序:MvcApplication--Application_Start--RegisterRoutes--RouteCollection添加规则

    请求进到网站--X--请求地址被路由按顺序匹配--遇到一个吻合的结束---就到对应的控制器和action

    路由规则

     路由是按照注册顺序进行匹配,遇到第一个吻合的就结束匹配;每个请求只会被一个路由匹配上

    忽略路由

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

     正则表达式  {resource}表示变量   a.axd/xxxx   resource=a   pathInfo=xxxx

    routes.IgnoreRoute("CustomService/{*pathInfo}");//CustomService开头,都不走路由。

    axd是历史原因,最开始都是webform,请求都是.aspx后缀,IIS根据后缀转发请求;MVC出现了,没有后缀,IIS6以及更早版本,打了个补丁,把mvc的请求加上个.axd的后缀,然后这种都转发到网站----新版本的IIS已经不需要了,遇到了就直接忽略,还是走原始流程

    常规路由

      //一般来说,我们不会扩展这个路由

      routes.MapRoute(

          name: "Default",//路由名称,RouteCollectionkey-valuekey 避免重复

          url: "{controller}/{action}/{id}",//正则规则:两个斜线 3个变量

          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

          //默认值 没有id变量 就是UrlParameter.Optional  没有action就是index  没有controllerhome

      );

    扩展路由

      routes.MapRoute(

          name: "About",

          url: "About",

          defaults: new { controller = "Home", action = "About", id = UrlParameter.Optional }

          );//固定路由,/Home/About----About

      routes.MapRoute(

         name: "Test",

         url: "Test/{action}/{id}",

         defaults: new { controller = "Second", action = "Index", id = UrlParameter.Optional }

         );//修改控制器,

      routes.MapRoute(

        name: "Regex",

        url: "{controller}/{action}_{year}_{month}_{day}",

        defaults: new { controller = "Second", action = "Index", id = UrlParameter.Optional },

        constraints: new { year = @"d{4}", month = @"d{2}", day = @"d{2}" }

        );

        //默认路由

      routes.MapRoute(

          name: "Default",

          url: "{controller}/{action}/{id}",

          defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }

          controllerhome

      );

      //http://localhost:2017/second/Time_2019_06_13    Regex

      //http://localhost:2017/second/Time_2019_6_13 失败

      //http://localhost:2017/second/Time?year=2019&month=6&day=13  Default

      //http://localhost:2017/test/Time?year=2019&month=6&day=13    Test

      //http://localhost:2017/test/Time_2019_06_13  失败的,只会被一个路由匹配

    Area

    Area:诞生的原因

      因为一个Web项目可以非常大非常复杂,多人合作开发,命名就成问题了,Area可以把项目拆分开,方便团队合作;演变到后面可以做成插件式开发.

    Area的注册和Route的注册很相似,都是创建匹配规则。在创建MVC项目时,添加区域,自动创建(AreaName)reaRegistration.cs,(AreaName)reaRegistration.cs中创建Area匹配规则

    Area也可以独立开,规则是必须有个继承AreaRegistration

    MVCArea注册的顺序:

    MvcApplication--Application_Start--AreaRegistration.RegisterAllAreas()---其实就是把SystemAreaRegistration给注册下---添加URL地址规则--请求来了就匹配(area在普通的之前)

    小结

    众所周知,MVC请求的最后是反射调用的controller+action,信息来自于url+route,路由匹配时,只能找到actioncontroller,  其实还有个步骤,扫描+存储,在bin里面找Controller的子类,然后把命名空间--类名称+全部方法都存起来

    a 控制器类可以出现在MVC项目之外,唯一的规则就是继承自Controller

    b Area也可以独立开,规则是必须有个继承AreaRegistration

     Razor语法

    前后端语法混编cshtml本质是一个类文件,混编了html+cs代码

    写后台代码:

    单行

    @{int i = 3; int m = 4;}  

    多行

    @{

        //多行

        ViewBag.Title = "Index";

        int k = 5;

    }

    行内

    <h3>行内:@ViewBag.Title</h3>

    关键字

    @for (int l = 0; l < 10; l++)

    {

        <a href="www.baidu.com">这里是个链接 @l</a><br>

    }

  • 相关阅读:
    代码块&继承&final关键字
    Java基础
    我的学习笔记
    CF743C 题解
    洛谷P4180 题解
    洛谷P3402 题解
    洛谷P3919 题解
    Noi.ac#30 题解
    Noi.ac #65题解
    Noi.ac #51题解
  • 原文地址:https://www.cnblogs.com/JohnTang/p/11048971.html
Copyright © 2011-2022 走看看