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

  • 相关阅读:
    HDU 5528 Count a * b 欧拉函数
    HDU 5534 Partial Tree 完全背包
    HDU 5536 Chip Factory Trie
    HDU 5510 Bazinga KMP
    HDU 4821 String 字符串哈希
    HDU 4814 Golden Radio Base 模拟
    LA 6538 Dinner Coming Soon DP
    HDU 4781 Assignment For Princess 构造
    LA 7056 Colorful Toy Polya定理
    LA 6540 Fibonacci Tree
  • 原文地址:https://www.cnblogs.com/Sinte-Beuve/p/4250480.html
Copyright © 2011-2022 走看看