• MVC3 Route 总结 Kevin


    1. 指定Controller、Action

    Routes.MapRoute("","{controller}/{action}");

    匹配:http://www.xxx.com/home/Index.

    2.带默认参数指定

    Routes.MapRoute("","{controller}/{action}",new {controller="Home",action="Index"});

    匹配:http://www.xxx.com/home/Index.

    http://www.xxx.com/home/

    http://www.xxx.com/

    3.静态参数和变量混用

    Routes.MapRoute("","X{controller}/{action}");

    匹配:http://www.xxx.com/Xhome/Index;

    Routes.MapRoute("","X/{controller}/{action}");

    匹配:http://www.xxx.com/X/home/Index.

    4.不带controller

    Routes.MapRoute("","X/{action}",new{controller="Home"});

    匹配:http://www.xxx.com/X/Index.

    5.自定义路由变量

    Routes.MapRoute("","{controller}/{action}/{id}",new {controller="Home",action="Index",id="defaultId"});

    自定义变量不能使用controller、action和area作为变量名。

    6.访问路由变量的值

    RouteData.Value[""]的值。

    例如:ViewBag.V=RouteData.Value["action"];

    另外一种方法就是把自定义变量当作Action的值传入到Action方法里面,如:

    public ViewResult CustomVariable(string id) {
    ViewBag.CustomVariable = index;
    return View();
    }

    7.定义选择性URL变量

    routes.MapRoute("MyRoute", "{controller}/{action}/{id}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });
    }

    这样,URL里包含和不包含id变量的值都能通过编译。

    8.通过C#选择性参数指定变量的默认值

    public ViewResult CustomVariable(string id = "DefaultId") {
    ViewBag.CustomVariable = id;
    return View();
    }

    9.定义可变长度的路由变量

    public static void RegisterRoutes(RouteCollection routes) {
    routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional });
    }

    匹配:mydomain.com/Customer/List/All/Delete //catcall=Delete

    mydomain.com/Customer/List/All/Delete/Perm //catcall=Delete/Perm

    10. 包含多个相同名称的Controller

    routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "URLsAndRoutes.Controllers"});

    通过指定controller的命名空间来区别两个名称相同的controller

    可以通过指定告诉MVC Framework只在某一命名空间中寻找对应的Controller

    Route myRoute = routes.MapRoute("AddContollerRoute", "Home/{action}/{id}/{*catchall}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new[] { "AdditionalControllers" });
    myRoute.DataTokens["UseNamespaceFallback"] = false;
    }

    11.通过正则表达式限制路由

    例如:

    routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { controller = "^H.*"},
    new[] { "URLsAndRoutes.Controllers"});

    就限制了controller必须是以H字母开头的

    限制路由为特定的值:

    routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { controller = "^H.*", action = "^Index$|^About$"},
    new[] { "URLsAndRoutes.Controllers"});

    限制了路由为Index或About方法

    限制路由的Http方法:

    routes.MapRoute("MyRoute", "{controller}/{action}/{id}/{*catchall}",
    new { controller = "Home", action = "Index", id = UrlParameter.Optional },
    new { controller = "^H.*", action = "Index|About",
    httpMethod = new HttpMethodConstraint("GET") },
    new[] { "URLsAndRoutes.Controllers" });

    12.从路由数据中构造URL

    @Html.RouteLink("Routed Link",new{controller="Home",action="About",id="MyID"}); //效果同Action

    @Url.RouteUrl(new{controller="Home",action="About",id="MyID"});//只产生URL,不带Action

    13.在Action方法中产生URL

    public ViewResult MyActionMethod() {
    string myActionUrl = Url.Action("Index", new { id = "MyID" });
    string myRouteUrl = Url.RouteUrl(new { controller = "Home", action = "Index" });
    ... do something with URLs...
    }

    14.重定向ActionResult

    方法一:

    public ActionResult MyActionMethod() {
    return RedirectToAction("Index");
    }

    方法二:

    public ActionResult MyOtherActionMethod() {
    return RedirectToRoute(new { controller = "Home", action = "Index", id = "MyID" });
    }

    15.从特定路由中获取连接

    routes.MapRoute("MyRoute", "{controller}/{action}");
    routes.MapRoute("MyOtherRoute", "App/{action}", new { controller = "Home" });

  • 相关阅读:
    如何保证你的路由器安全?
    Jmeter、fiddler、postman 如何模拟ajax请求
    U盘快速格式化和普通格式化有什么区别
    Layui button disabled
    TP连接数据库字符串方式
    Warning: require(D:wamp64wwwxxxpublic/../thinkphp/start.php): failed to open stream: No such file or directory in D:wamp64www xxx publicindex.php on line 17
    [AWS] EC2
    [AWS] EC2
    [AWS] EC2
    [AWS DA
  • 原文地址:https://www.cnblogs.com/kfx2007/p/2978214.html
Copyright © 2020-2023  润新知