2017-10-18 13 views
0

2つの異なるURLを使用するように1つのコントローラをセットアップしようとしています。MVCルーティング - 複数のURLが単一のコントローラ/メソッドに一致する

  • mysite.com/MyArea/some-route/SomeAction
  • mysite.com/OtherArea/some-route/SomeAction

それでは、私が欲しいのに移動することです両方とも同じ場所に行くようにしてください。

だから私はこのように設定したクラスを持っている:

[RouteArea("MyArea", AreaPrefix = "MyArea")] 
[RoutePrefix("some-route")] 
[Route("{action}")] 
public class MyController : Controller 
{ 
    [Route("SomeAction")] 
    [Route("~/OtherArea/some-route/SomeAction")] 
    [AcceptVerbs(HttpVerbs.Get)] 
    public ActionResult MyAction() 
    { 
     return View(); 
    } 
} 

だから、これは動作します - 少し乱雑に見えるけれども。
URLをブラウザに入力すると、このアクション/ページが表示されます。

'OtherArea'は実際には存在しません。時には最初のURLを使用したい場合もあれば、時には2番目のURLを使用することもあります。

1)このアクションにルーティングしてURLを指定するにはどうすればよいですか?

RedirectToAction("MyAction", "MyController", new { area = "MyArea" }); 

私はコントローラ/アクションのみを指定しています - それはそれ自身で見つけたURLです。 強制的に使用することはできますか?

パスをハードコーディングするのが理想的です。

2)私がやろうとしていることをする良い方法がありますか?
私は、この行のファンではない:

[Route("~/OtherArea/some-route/SomeAction")] 

しかし、私はまたちょうど2番目のURLを持っていることのために、コントローラや新エリアのコピーを作成する必要はありません。

おかげ

答えて

1

あなたはこの方法であなたのロジックを配置し、2つのdefferentアクション

[Route("SomeAction")]  
[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult MyAction1() 
{ 
    MyMethod() 
    return View("MyAction"); 
} 


[Route("~/OtherArea/some-route/SomeAction")] 
[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult MyAction2() 
{ 
    MyMethod(); 
    return View("MyAction"); 
} 

private MyMethod(){ 
.... 
} 

でそれを使用する。しかし、彼らはまだそれは実際に私がいたよりもはるかに簡単だなるほど

+0

同じビューを共有することができなければなりません期待している。私はそれをどう思っていたんだよね> _ < –

関連する問題