1.传统路由的路由模板,设置默认值,可选参数的写法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace WebApplication9
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
2.设置路由约束
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace WebApplication10
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute("blog", "{year}/{month}/{day}",
new { controller = "blog", action = "index"},
new {year=@"\d{4}",month= @"\d{2}",day= @"\d{2}" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { id = UrlParameter.Optional }
);
}
}
}
3.新建BlogController,在index方法里面设置断点,发现访问http://localhost:62844/2014/01/01既可以访问到,并且拿到year,month,day的值,此时如果输入http://localhost:62844/14/01/01则不满足要求就会返回404
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WebApplication10.Controllers
{
public class BlogController : Controller
{
// GET: Blog
public ActionResult Index(int year, int month, int day)
{
return View();
}
}
}
4.另外添加一个Test路由
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace WebApplication10
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Test",
url: "code/p/{controller}/{action}/{id}",
defaults: new { controller = "Section", action = "index", id = UrlParameter.Optional }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new {controller="Home",action="index", id = UrlParameter.Optional }
);
}
}
}
5.在视图中可以指定不同的路由名来生成不同的超链接,生成的超链接为<a href="/code/p/section/index/123">to Test</a>
<a href="/Home/index/123">to Default</a>
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
@Html.RouteLink("to Test","Test", new { controller = "section", action = "index",id=123 })
@Html.RouteLink("to Default","Default", new { controller = "Home", action = "index",id=123 })
6.在项目中点击右键添加区域
7.在区域目录下AdminAreaRegistration.cs里面会自动增加区域的路由设置
using System.Web.Mvc;
namespace WebApplication10.Areas.Admin
{
public class AdminAreaRegistration : AreaRegistration
{
public override string AreaName
{
get
{
return "Admin";
}
}
public override void RegisterArea(AreaRegistrationContext context)
{
context.MapRoute(
"Admin_default",
"Admin/{controller}/{action}/{id}",
new { action = "Index", id = UrlParameter.Optional }
);
}
}
}
8.在Areas/Admin/Controllers下面添加UserController,此时可以通过http://localhost:62844/admin/user访问到UserController里面的Index方法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
namespace WebApplication10.Areas.Admin.Controllers
{
public class UserController : Controller
{
// GET: Admin/User
public ActionResult Index()
{
return View();
}
}
}