2016-05-16 121 views
0

我有一个配置文件网站,现在我想让它很容易记住的URL。asp.net中的路由区域mvc

我有一个像

  • www.page.com/faq链接
  • www.page.com/news/1
  • www.page.com/rules
  • www.page。 com/profile/[USERNAME]

现在,我想将网址www.page.com/profile/[USERNAME]更改为www.page.com/[USERNAME]。该配置文件是我项目中的一个自己的区域。

我ProfileAreaRegistration.cs

public override string AreaName => "Profile"; 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "Profile_media", 
      "Profile/{ProfileName}/Media/{id}", 
      new 
      { 
       area = "Profile", 
       controller = "Media", 
       action = "Index" 
      }, 
      new[] { "MySite.Areas.Profile.Controllers" }); 

     context.MapRoute(
      "Profile_default", 
      "Profile/{ProfileName}/{controller}/{action}/{id}", 
      new 
      { 
       area = "Profile", 
       controller = "Home", 
       action = "Index", 
       id = UrlParameter.Optional 
      }, 
      new[] { "MySite.Areas.Profile.Controllers" }); 

    } 

我RouteConfig.cs

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

     routes.MapRoute(
      "News", // Route name 
      "News/{id}", // URL with parameters 
      new {controller = "News", action = "Index", id = UrlParameter.Optional}, 
      new[] {"MySite.Controllers.News"} 
      ); 

     routes.MapRoute(
      "Default", 
      "{controller}/{action}/{id}", 
      new {controller = "Home", action = "Index", id = UrlParameter.Optional}, 
      new[] {"MySite.Controllers"} 
      ); 
    } 

我怎样才能www.page.com/rules和www.page.com/[USERNAME]工作?当我输入www.page.com/[USERNAME]时,应调用区域配置文件。

+3

由于[用户名]可以是任意的字符串值,你需要确保配置文件路径是要添加到路由表中的最后一个,防止劫持您所有的预先设定好的路线。但是你仍然需要怀疑你是否真的希望[USERNAME]成为顶级目录类型的路线。如果某人拥有'faq'或'rules'作为用户名呢?这可能会导致你的路线很多冲突... –

+0

谢谢。是的,如果用户名是常见问题或规则,可能会出现问题。当用户创建帐户或者我可以更改地址时,我可以通过用户名保护常见问题和规则,www.page.com/faq - > www.page.com/start/faq。但现在,我应该从哪里开始将www.page.com/[USERNAME]发送到www.page.com/Profile/[USERNAME]区域 – mrcode

回答

0

从ProfileArea路线离开了Profile,像这样:

public override string AreaName => "Profile"; 

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "Profile_media", 
     "{ProfileName}/Media/{id}", 
     new 
     { 
      area = "Profile", 
      controller = "Media", 
      action = "Index" 
     }, 
     new[] { "MySite.Areas.Profile.Controllers" }); 

    context.MapRoute(
     "Profile_default", 
     "{ProfileName}/{controller}/{action}/{id}", 
     new 
     { 
      area = "Profile", 
      controller = "Home", 
      action = "Index", 
      id = UrlParameter.Optional 
     }, 
     new[] { "MySite.Areas.Profile.Controllers" }); 

} 
+0

当我删除配置文件时,所有请求均路由到/ Profile/[USERNAME]甚至/ faq&/ rules。 – mrcode

+1

您需要确保在您的常规路线注册后进行区域注册。你能证实这一点吗? RouteConfig中的执行顺序是什么? –

+0

是的,现在它可以工作。我改变了顺序,删除了RegisterRoutes中的默认路由并添加了所有页面(faq,rukes ...) – mrcode