路由

如果把mvc当作一个运输线,模型就是各环节中货物,那么路由就是指路牌。
asp.net mvc中有一条简约开发原则:约定优于配置,默认创建的项目中有Controller、Views、Models这么几个文件夹,如果为了项目需要也可以把他们分开封装成类库,但是这样会失去vs提供的“脚手架”功能。
http请求会先经过路由找到对应的Controller。
默认Global文件中的样子(大概...):
public class MvcApplication : System.Web.HttpApplication { public static void RegisterGlobalFilters(GlobalFilterCollection filters) { filters.Add(new HandleErrorAttribute()); } public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute( "Default", // 路由名称 "{controller}/{action}/{id}", // 带有参数的 URL new { controller = "Home", action = "Index", id = UrlParameter.Optional } // 参数默认值 ); } protected void Application_Start() { //System.Diagnostics.Process.Start("net.exe ","use \\\\192.168.1.69\\web123 webiis123 /user:webiis ");//虚拟目录建立信任 AreaRegistration.RegisterAllAreas(); RegisterGlobalFilters(GlobalFilters.Filters); RegisterRoutes(RouteTable.Routes); } }
RegisterGlobalFilters方法用来添加全局filter。
Application_Start注册全局filter,注册路由,注册Area(也涉及到路由)。
RegisterRoutes就是路由的配置,一般我会
public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapRoute("NoAction", "{controller}.html", new { controller = "Home", action = "Index", id = UrlParameter.Optional });//无Action的匹配 routes.MapRoute("NoID", "{controller}/{action}.html", new { controller = "Home", action = "Index", id = UrlParameter.Optional });//无ID的匹配 routes.MapRoute("Default", "{controller}/{action}/{id}.html", new { controller = "Home", action = "Index", id = UrlParameter.Optional });//有ID的匹配 routes.MapRoute("Old", "{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional });//默认匹配 }
后面加上.html是为了url看起来更cooooool一点...
完了。
PS:项目较大就涉及到Area,Area的路由配置也很简单,但是显得很蛋疼
先建的area里面有继承了AreaRegistration的类,有重写AreaName属性,返回的就是Area的名称,另外
public override void RegisterArea(AreaRegistrationContext context) { context.MapRoute( "Area1", "Area1/{controller}/{action}/{id}", new { controller = "Home", action = "Index", id = UrlParameter.Optional }, null, newstring[] { "命名空间.Controllers.*" } ); }
可以通过路由来实现一些文件请求的处理或者防盗链之类的功能。
虽然路由是一个一劳永逸的东西,不建议配置的太过复杂。
浙公网安备 33010602011771号