2016-05-16 7 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/ [ユーザ名]をwww.page.com/ [ユーザ名]に変更します。プロフィールは私のプロジェクトの自分のエリアです。

マイ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/[USERNAME] www.page.com/rulesの作業どのように私は得ることができますか? www.page.com/-USERNAMEを入力すると、エリアプロファイルを呼び出す必要があります。

+3

を[USERNAME]は任意の文字列値を指定できますので、あなたがプロファイルルートがルーティングテーブルに追加された最後のものであることを確認する必要があり、すべてのあなたのprefedinedルートをハイジャックするのを防ぐために。しかし、[USERNAME]がトップレベルのディレクトリの種類のルートになることを本当に望んでいるかどうか疑問に思う必要があります。誰かが 'faq'や' rules'をユーザ名として持っているとどうなりますか?それはあなたのルートに紛争の多くを引き起こす可能性があります... –

+0

ありがとう。はい、ユーザー名がfaqかルールの場合は問題になる可能性があります。ユーザーがアカウントを作成したとき、またはアドレスを変更できるときに、私はいつもユーザー名からfaqとルールを保護することができます.www.page.com/faq - > www.page.com/start/faqしかし、今のところ、www.page.com/-USERNAMEをどこに送る必要がありますか?www.fage.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