关于路由
一般新建一个web项目,都会自动创建一个路由文件
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 } ); } }
默认/Home/Index就是首页
如果要更改首页,只需要更改控制器名称和方法名称就可以了。
如果控制器多一点,路径略微复杂一点,可以这样设置
config.Routes.MapHttpRoute( name: "V2ApiWithAction", routeTemplate: "api/v2/{controller}/{action}/{id}", defaults: new { id = RouteParameter.Optional, @namespace = "Cloud.QuestionManage.Api.Web.Controllers.V2" }
namespace指出映射的命名空间,routeTemplate指出路径
这都是按照默认的路由方式:控制器/方法名?参数的方式找到指定方法的。
如果想改变url的形式,可以使用特性路由,来自定义路由。
public class RouteConfig { public static void RegisterRoutes(RouteCollection routes) { routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); routes.MapMvcAttributeRoutes();//特性路由,通过特性的方式重新定义路由 routes.MapRoute( name: "Default", url: "{controller}/{action}/{id}", defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } ); } }
例如:
[Route("~/sjxq/{isCloud:int}/{paperId:long}")] public async Task<ActionResult> PaperDetail(int isCloud, long paperId) { }
这个方法的请求地址就会变成:根目录+'/sjxq/0/123'
使用Url.Action("Home","PaperDetail",new {isCloud=0,paperId=123}),解析,也会解析成上面的地址,而不是/Home/PaperDetail?iscloud=0&paperId=123