关于路由

一般新建一个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

posted on 2018-01-24 16:29  木头人段  阅读(95)  评论(0编辑  收藏  举报

导航