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框架揭秘》中,只是做内容的梳理和总结。

  • 相关阅读:
    Using F2 to Rename Open Files
    Java 浅析 Thread.join()
    JDK 8
    Automata
    The Hungarian Abhorrence Principle
    Spring 与 MyBatis 的整合
    JDK 8
    面向对象设计原则汇总
    Java Error : type parameters of <T>T cannot be determined during Maven Install
    【源码拾遗】从vue-router看前端路由的两种实现
  • 原文地址:https://www.cnblogs.com/Sinte-Beuve/p/4250480.html
Copyright © 2011-2022 走看看