1:路由
public class RouteConfig
{
/// <summary>
/// 系统默认的路由设置
/// </summary>
/// <param name="routes"></param>
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 }
);
}
}
在Global中的Application_Start 方法中调用RegisterRoutes
Defaults:的作用是默认,既 你如果缺什么值,他就把这个值默认给你补上,从而达到匹配这条路由规则,同时如果有多个路由规则,那么程序是按顺序进行匹配的,就意味着,我们要将比较特殊的路由规则放在前面。
例如有路由规则:
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "LayoutDemo", action = "LayoutdEmo1", id = UrlParameter.Optional }
);
}
Control 如下
public class LayoutDemoController : Controller
{
//
// GET: /LayoutDemo/
public ActionResult LayoutdEmo1()
{
return View("LayoutdEmo1");
}
}
url: http://localhost:xxx/
这样同样就直接访问LayoutdEmo1 这个action了,如果action里面没有参数,url中有参数,那么这个参数是会被忽略的,从而可以匹配。
如果action有参数(而参数又不能为空(就是在参数前面加问号)),而url中没有参数,又没有默认参数,这样是要出问题的。
参见http://www.cnblogs.com/wintersun/archive/2009/01/12/1374473.html
http://www.cnblogs.com/hmiinyu/category/349761.html(好文章 一定要看)