2012-06-23 52 views
1

我想按照这个页面http://www.deliveron.com/blog/post/SEO-Friendly-Routes-with-ASPnet-MVC.aspx,这是我在Global.asax中,ASP.NET MVC SEO友好的URL

public class MvcApplication : System.Web.HttpApplication 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.MapRoute(
      "MemberRoute",      // routeName 
      "member/{userId}/{pseudoName}", // url 
      new 
      {       // url defaults 
       controller = "Member", 
       action = "Index", 
       userId = 0, 
       pseudoName = UrlParameter.Optional 
      }, 
      new 
      {       // url constraints 
       userId = @"\d+" // must match url {userId} 
      } 
     ); 
    } 

    protected void Application_Start() 
    { 
     AreaRegistration.RegisterAllAreas(); 

     FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters); 
     RouteConfig.RegisterRoutes(RouteTable.Routes); 
     BundleConfig.RegisterBundles(BundleTable.Bundles); 
    } 
} 

MemberController,

public ActionResult Index(int id, string pseudoName) 
    { 
     User user; 
     var unitOfWork = new UnitOfWork(); 
     user = unitOfWork.UserRepository.GetById(id); 

     var expectedName = user.PseudoName.ToSeoUrl(); 
     var actualName = (pseudoName ?? "").ToLower(); 

     // permanently redirect to the correct URL 
     if (expectedName != actualName) 
      return RedirectToActionPermanent("Index", "Member", new { id = user.UserId, pseudoName = expectedName }); 
     return View(user); 
    } 

这是从返回来自AccountController的登录动作,

return RedirectToAction("Index", "Member", new { id = user.UserId, pseudoName = user.PseudoName }); 

当重定向发生时,Url最终看起来像http://site.com/Member/1?pseudoName=CEO

我在做什么错?

+0

'RedirectToRoute(“Member”,new {id = user.UserId,pseudoName = user.PseudoName})''。查找'RedirectToRoute'。 –

+0

我收到错误“在路由集合中找不到名为'Member'的路由 参数名称:name” –

回答

0

记住你使用MapRoute超过MapHttpRoute,所以你要使用RedirectToRoute或(在标记)@Html.RouteLink调用它。

所以,让它在你上面的代码工作,而不是重定向到一个动作,然后指定参数,使用以下命令:

return RedirectToRoute("Member", new { 
    userId = user.Id, // note i use userId as it's in the route's url 
    pseudoName = user.pseudoName 
}); 

而且,在你的路线会去如下解决办法如下:

routes.MapRoute(
    "Member",      // routeName 
    "member/{userId}/{pseudoName}", // url 
    new {       // url defaults 
    controller = "Member", 
    action = "Index", 
    userId = 0, 
    pseudoName = UrlParameter.Optional 
    }, 
    new {       // url constraints 
    userId = @"\d+"    // must match url {userId} 
    } 
); 
+0

复制了这个,我仍然收到错误...找不到名为'Member'的路由在路线集合中。 参数名称:名称 –

+0

您在哪里可以参考'{name}'?也许在其网址中使用“{name}”的另一条路线? –

+0

我没有定义任何其他路由。 –