2017-01-26 8 views
0

私は、aspxページで行っていたように、古いURLを検索するために検索してきました。エイリアスがwww.domain.com/my-greatのようなページを指している可能性があります - エイリアスはwww.domain.com/alias.aspxを指します。 MVCでも同じことをしたいのですが、これをルートテーブルで行う方法を理解できません。 www.domain.com/my-great-aliasはエンドユーザーに表示されますが、www.domain.com/alias/2を参照してください。C#.NET MVCルートエイリアシング

これは私が探している人には意味がありますか? //別名コントローラ

public ActionResult Select() 
     { 
      return View("select"); 
     } 

//レシピコントローラー

public ActionResult Select() 
    { 
     return View(); 
    } 
+0

MVCはセットアップに*コントローラのアクションメソッド*ない他のURLにURLをマッピングすることです。あなたの質問は少し不明です。ユーザが '/ alias/2'にナビゲートするとどうなるでしょうか?それはページに役立つはずですか? 404が見つからないか、301リダイレクトする必要がありますか?前者の場合、2つの異なるURLを同じアクションメソッドにマップできます。後者の場合、おそらく '/ alias/2'を取り除くことができます。なぜなら、それはあまり目的がないように思われるからです。 – NightOwl888

+0

このURLを見ると、http://www.motherearthnews.com/organic-gardening/vegetables/late-season-salad-crops-zb0z1701zsgreこのサイトはMVCを使用して構築されていますが、これは私が望む動作です。エイリアスはCMSから来ていますが、私はMVCだけでそれを行う方法を理解できません。エイリアスは、URLのソースのハードコードではありません。 – Cpurepair785

答えて

1

//ルータ

routes.MapRouteLowercase(
          "Alias", 
          "{id}", 
          new 
          { 
           controller = "alias", 
           action = "select", 
           id = UrlParameter.Optional 
          } 
         ); 

あなたは、この利用ルートの設定やパラメータを行うことができるはず(など同じドメイン内にいる限り):

ルーティング

 routes.MapRoute(
      name: "AliasRoute", 
      url: "{id}", 
      defaults: new { controller = "Alias" } 
     ); 

コントローラ

public class AliasController : Controller 
{ 
    public ActionResult Index(string id) 
    { 
     //DO SOME DATABASE STUFF HERE TO LOOKUP THE CORRESPONDIND CONTROLLER AND ACTION 
     var controllerAction = lookupControllerActionInDatabase(id); 
     return View(controllerAction.ViewName); 

     //OR 

     //DO CONDITIONAL CHECKS HERE AND RETURN THE APPROPRIATE VIEW 
     if (id == "my-great-alias") { 
      return View("Alias"); 
     } else if (id == condition1) { 
      return View("viewForCondition1"); 
     } else if (id == condition2) { 
      return View("viewForCondition2"); 
     } 
     //AND SO ON... 
    } 
} 
+0

これは良い解決策になりますが、私はそれを行うための動的な方法をもっと探しています。データベース内のURLを検索し、コントロールとアクションの名前を返すなどして、URLをエンドユーザーのままにしておくと、http://www.domain.com/my-great-aliasのみが表示されます。 – Cpurepair785

+0

上記のコードのようなものは、エンドユーザーにはdomain.com/my-great-aliasのみが表示され、実行されるコードは 'Alias'コントローラになります。しかし、私はそれの "動的な"部分についてはわかりません。あなたが "動的"と言うときは、ランタイムについて話していますか? –

+0

はいaspx winformでは、データベースで実行されたエイリアスを検索するためにglobal.csを使用して、コレクションにキャッシュします。 URLを検索するページを取得してコンテンツを表示します。この場合、私はMVCのモデル情報を保持して同じことが必要です。 – Cpurepair785