我有这样的网址 -
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目的。
答案 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>