2017-03-18 36 views
2

私のasp.net mvcアプリケーションのURLをカスタマイズしたいと思います。 1asp.net mvcでURLをカスタマイズする方法

Current URL : localhost/Country/Index/param1 
Expected URL : localhost/param1 

ケース:事前に2

Current URL : (1) localhost/Country/Index/param1 (Param1 is name of country) 
       (2) localhost/State/Index/param11 (param11 is name of state) 

Expected URL : localhost/param1/param11 (I need second url like this.) 

ありがとう現在、私はasp.net MVC 4.5

ケースに取り組んでいます。

+0

あなたはできません。 'param1'が既存の国と一致することを確認するためにリポジトリを参照できる制約を作成しない限り、コントローラとアクションの方法を区別する方法が必要です。しかし、特定のルートを定義して '../ Country/param1'というURLを生成することができます –

+0

Thanx Stephen .." case -1 "は可能ですか? – Ashrafali

+0

どちらも可能ですが、国のデータベースを検索し、 'param1'の値が有効な国であることを検証するルート制約を作成することを意味します。しかし、それは毎回のリクエストで呼び出されるので、それは本当に良い考えではありません。 –

答えて

2

結果を得るには、イベントごとに個別のルータを作成してください。

現在、以下のようなデフォルトルートを使用している可能性があります。

routes.MapRoute(
    name: "Default", 
    url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
); 

または別のルートを作成してみてください。

私の提案は、すべてのイベントのルートを作成することです。 のように: 希望の結果を得るためにparam1とparam11でルートを作成してください。

routes.MapRoute(
    name: "Default", 
    url: "param1/param11", 
    defaults: new { controller = "param1", action = "param11", id = UrlParameter.Optional } 
); 

別のイベントとメソッドの同じ作成。

0

ASP.net MVCはルーティングに基づいてリクエストを処理します。ルーティングは、ルーティングテーブルからフェッチされたデータに対して機能します。だから、基本的には、少なくともコントローラとaction.But MVCは、私たちに次のようにURLを変更するオプションを提供持っている必要があります:

routes.MapRoute(
       name: "Test", 
       url: "myURl/{param1}", 
       defaults: new { controller = "myURl", action = "actualActionName", id = UrlParameter.Optional } 
      ); 

MVC5で同じ属性ルーティングすることにより行うことができます。

関連する問題