在asp.net MVC4中重写url

时间:2014-05-10 12:46:04

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-mvc-routing

我有这样的网址 -

http://localhost:2332/Home/Video?vd_id=525&videoview=63

我希望它像这样 - Home/Video/525/63并删除查询部分。

为此,我尝试在Route.config -

中重置此网址
   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 }
            );

            routes.MapRoute("newRoute",
                   "Video",
                   new { controller = "Home", action = "Video" },
                   new { action = "Video" }
           );

        }
    }

但是这个网址没有任何变化。 我如何映射它的路线,以便寻找SEO目的。

3 个答案:

答案 0 :(得分:1)

你可以用两种方式做到这一点。使用"基于约定的路由"方式或使用新的"属性路由" MVC5提供的功能。

//流程1:基于约定的路由:

routes.MapRoute(
            name: "Default2",
            url: "{controller}/{action}/{id1}/{id2}",
            defaults: new { controller = "Home", action = "Video", id1 = UrlParameter.Optional, id2 = UrlParameter.Optional });

//进程2:属性路由: 您可以使用属性路由轻松实现此目的。要启用属性路由,我们需要在配置期间调用路由集合类的MapMvcAttributeRoutes方法。

public class RouteConfig
{
     public static void RegisterRoutes(RouteCollection routes)
     {
         routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

         //Add the following line of code
         routes.MapMvcAttributeRoutes();

        //[Code Excerpt]
     }
}

必须在操作方法之上或控制器顶部定义路由属性。

  [RoutePrefix("Home")]
  [Route("{action=index}")]
  public class HomeController:Controller
  {
       [Route("Video/{id?}/{id2?}")]
       public ActionResult Video()
       {
            //your code goes here
            return View();
       }

详细信息请查看:http://learnwithshahriar.wordpress.com/2014/05/08/attribute-routing-in-asp-net-mvc5/

答案 1 :(得分:0)

将此添加到其他人之上。你真的不需要最后一个,因为它会自动映射到默认/默认2路由。 defaults参数仅在没有参数时才会应用。

routes.MapRoute(
                name: "Default",
                url: "{controller}/{action}/{id}/{id2}",
                defaults: new { controller = "Home", action = "Index", id2 = UrlParameter.Optional }
            );

然后在生成网址时

Html.ActionLink("您的链接文字","操作",新{id =" XXX",id2 =" YYY" )")

答案 2 :(得分:-3)

指定网址如下

<a href="@Url.Action("Home","Video")/10/20">Video</a>