zoukankan      html  css  js  c++  java
  • ASP.NET MVC路由解析

    继续往下看《ASP.NET MVC5框架揭秘》。 

    ASP.NET系统通过注册路由和现有的物理文件路径发生映射。而对于ASP.NET MVC来说,请求的是某个Controller中的具体的Action方法。

    路由注册和忽略的方法与ASP.NET不同,位于RouteCollectionExtensions中。

    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    routes.MapRoute(
      name: "Default",
      url: "{controller}/{action}/{id}",
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
      );
    UrlParameter.Optional表示只有请求的URL真正包含具体变量值时RouteData里才会有相应的变量存储。
    Area路由映射
    场景:假设在Controller下有一个文件夹api,里面包含了用来调用的api。而且api目录下的Controller可能包含和Controller目录下相同命名的Controller。
    这个时候可以通过AreaRegisteration来实现。AreaRegisteration是一个抽象类。
    public abstract class AreaRegistration
        {
            protected AreaRegistration();
            public abstract string AreaName { get; }
            public static void RegisterAllAreas();
            public static void RegisterAllAreas(object state);
            public abstract void RegisterArea(AreaRegistrationContext context);
        }

    建一个ApiAreaRegisteration,实现抽象方法和属性。

    public class ApiAreaRegisteration :AreaRegistration
        {
         //返回一个Area名
    public override string AreaName { get { return "api"; } }    public override void RegisterArea(AreaRegistrationContext context) { object defaults = new { Controller = "utility", Action = "Add", num = 1 }; context.MapRoute("apidefault","api/{controller}/{action}/{num}",defaults,new string[]{"MvcTest.Controllers.api"}); } }

    在global.asax里注册

            protected void Application_Start()
            {
                AreaRegistration.RegisterAllAreas();
            }
    AreaRegistrationContext 是对应的上下文包含AreaName、Routes等信息和一系列注册路由的方法。
    调用
    AreaRegistration.RegisterAllAreas()静态方法后,会反射创建ApiAreaRegisteration 对象,调用RegisterArea()方法实现路由注册。

    注:本博文大多数内容来自《ASP.NET MVC5框架揭秘》中,只是做内容的梳理和总结。

  • 相关阅读:
    MD5算法--网盘秒传
    无线网络定位算法综述
    android学习---异步任务(AsyncTask)
    python中局部变量的定义
    python3里函数怎么样使用元组或字典作为参数调用(复制他人博客)
    调试exynos4412—ARM嵌入式Linux—LEDS/GPIO驱动之一
    Linux入门之——安装虚拟机软件
    Linux学习方法之以始为终—Linux工作分类
    Linux基础系列—Linux内核源码目录结构
    Linux基础系列—Linux体系结构和Linux内核结构
  • 原文地址:https://www.cnblogs.com/Sinte-Beuve/p/4250480.html
Copyright © 2011-2022 走看看