• ASP.NET MVC之路由深究


    MVC的强大之处之一当然是路由,这是几年前一位牛人给我说过的话,本人深感认同。今天就再次探究。

    首先新建一个空的MVC项目,我们会发现在RouteConfig类中存在一个默认的路由配置,通常我会在这里的路由中添加一个命名空间,以防止路由配置冲突

                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    namespaces: new string[] { "MvcRoute.Controllers" }
                );

    假如需要自定义路由则需要在默认路由上面再添加路由,他的原则的从上至下匹配路由,这些都是很简单的

    有一个重点就是伪静态操作,不要告诉我你不知道伪静态这个东西,说明你太古董了

    当然伪静态的配置原则一般都是将Action进行修改,如下:

                //html route
                routes.MapRoute(
                    name: "Default_Html",
                    url: "{controller}/{action}.html/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    namespaces: new string[] { "MvcRoute.Controllers" }
                );
                //default
                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
                    namespaces: new string[] { "MvcRoute.Controllers" }
                );

    如果你只是简单的进行这样的修改操作,你会报这样的错误:

    原因是因为webconfig缺少了配置,添加如下配置:

    原因顾名思义。这个原因当初把我害的够惨的。。。

     以上的东西其实都是很简单的,下面来说一说控制器方面的:

    其实我发现在稍微大一点的项目中,我们的开发人员会新建很多很多的控制器,外层的控制器不够用了,那么就会新建区域,其实这样给我的感觉就是太乱了,那有木有神马解决办法方便管理呢?当然有,那就是将控制器进行分离

    我们首先将最外层的控制器进行分离操作

    1、新建类库,用于单独存放控制器

    我们发现将WEB中的控制器删除单独拿出来存放在一个类库中也是可以的,当然必须包含两个条件:

      首先这个类库中的控制器的命名空间必须和RouteConfig中的路由配置中的命名空间要相同,否则没办法访问

      WEB项目必须添加这个类库的引用

    我们再次来观看这个项目的结构,是不是感觉项目变得很容易管理啊,WEB层中只包含了一些基本的配置和页面,假如有一天控制器中的逻辑需要修改了,我只需将这个类库进行替换操作

    区域进行分离操作

    这个区域分离操作我感觉十分的重要

    首先我们在WEB中添加路由System(纯属测试),VS会自动添加了几个文件夹和当前区域的路由

    下面我们也进行控制器分离操作,首先将WEB中区域没有用的文件夹删除,新建类库MvcRoute.Areas.System,具体如下

    我们来看一下目录结构,控制器和区域路由都分离到了一个类库中了,WEB中只剩下视图和配置

    成功运行图片:

    运行成功必须满足一下条件:

      类库中的控制器命名空间必须和SystemAreaRegistration中的路由配置命名空间一致

      WEB必须添加这个类库的引用

    说了这么多的优点,那么当然会存在一些缺点,比方说,我们会返现在区域的控制器中VS没有办法识别这个Action是否存在视图,而且根据Action查找视图也变得不方便

    今天就到这里

  • 相关阅读:
    2019年3月6日 980. Unique Paths III
    2019年3月05日 961. N-Repeated Element in Size 2N Array
    2019年3月4日 701. Insert into a Binary Search Tree
    2019年3月1日 804. Unique Morse Code Words
    2019年2月28日 654. Maximum Binary Tree
    2019年2月26日 Unique Email Addresses、To Lower Case、Encode and Decode TinyURL
    Nexus Repository Manager 3 远程命令执行漏洞(CVE-2020-10199)复现
    常见的Web源码泄漏漏洞及其利用
    Nmap-脚本检测CVE漏洞
    Vulnhub-dpwwn-01靶机过关记录
  • 原文地址:https://www.cnblogs.com/wms01/p/6192963.html
Copyright © 2020-2023  润新知