关键词搜索

源码搜索 ×
×

ASP.NET MVC 多路由规则应用一例

发布2018-02-01浏览2159次

详情内容

背景,ASP.NET MVC里,页面路径一般是 ~/Area/Controller/Action

同事为了菜单路径有所区别,写了一堆控制器。但是按照业务结构,这些控制器都应该从属于某个控制器之下,现在却变成与之并列了。

其实可以通过设置路由来解决这个问题。即取消这堆“子”控制器,将它们的代码移植到“父”控制器中,然后在路由规则里假装还有这些控制器。

路由规则:

public override void RegisterArea(AreaRegistrationContext context) 
{
    context.MapRoute(
        "OneMap_RedTide",
        "OneMap/RedTide/{action}/{id}",
        defaults: new { controller = "Pop", action = "Index", id = UrlParameter.Optional }
    );
    context.MapRoute(
        "OneMap_AAlgae",
        "OneMap/AAlgae/{action}/{id}",
        defaults: new { controller = "Pop", action = "Index", id = UrlParameter.Optional }
    );
    context.MapRoute(
        "OneMap_Cyanobacteria",
        "OneMap/Cyanobacteria/{action}/{id}",
        defaults: new { controller = "Pop", action = "Index", id = UrlParameter.Optional }
    );
    context.MapRoute(
        "OneMap_Protozoa",
        "OneMap/Protozoa/{action}/{id}",
        defaults: new { controller = "Pop", action = "Index", id = UrlParameter.Optional }
    );
    //以上4条路由规则,都实质指向控制器Pop(原理详见底部相关文章),但访问地址都可以各自写成假的控制器:

    /*
    ~/OneMap/RedTide/**
    ~/OneMap/AAlgae/**
    ~/OneMap/Cyanobacteria/**
    ~/OneMap/Protozoa/**
    等同于:
    ~/OneMap/Pop/**
    ~/OneMap/Pop/**
    ~/OneMap/Pop/**
    ~/OneMap/Pop/**
    */

    //系统默认路由
    context.MapRoute(
        "OneMap_default",
        "OneMap/{controller}/{action}/{id}",
        defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34
  • 35
  • 36
  • 37
  • 38
  • 39
  • 40
  • 41
  • 42
  • 43

相关文章:
对ASP.NET MVC 的路由一点理解


context.MapRoute(
“OneMap_Hlx”,
“OneMap/Hlx/Ais/{id}”,
defaults: new { controller = “Pop”, action = “Hlx_Ais”, id = UrlParameter.Optional }
);

控制器、action都是另有所指。


config.Routes.MapHttpRoute(
    name: "BetweenApi",
    routeTemplate: "{controller}/{code}/{st}/{et}",
    defaults: new { code = RouteParameter.Optional,
        st = RouteParameter.Optional,
        et = RouteParameter.Optional,
    }
);
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
http://localhost/ybjzcheck.api/hyz/BAO/2017-09-01/2017-09-03
  • 1

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载