MVC

2012-02-13 8 views
1

でデフォルトの数値ルートルート私はウェブサイトを持っていると私はMVC

/22   Redirect to 
/user/22 

などをしたいというように、しかし、そこに他のMVCのビューとコントローラがあり、それらすべてが無事に動作し、私は以下のルートが、そのないを使用していましたワーキング。

routes.MapRoute(
    "Final", 
    "{id}", 
    new { controller = "Root", action = "Index"}, 
    new { id = @"\d+" }, 
    new string[] { "MyWebApp.Controllers" } 
); 

このルートは、url fragmentが数値の場合にのみ有効です。

私はMyWebApp.Controllers名前空間にもRootControllerを持っています。そして、それがないすべては、以下のように他のページにリダイレクトされ、それは昔のウェブサイトへのアップグレードであり、その公共および使用中のため、我々は、URLスキームを変更することはできませんので、

public class RootController : Controller 
{ 
    public ActionResult Index(long id) { 
     return RedirectPermanent("/user/" + id); 
    } 
} 

は今、私たちはこれをしなければなりません。

注:URL/user/22などは正しく動作していますが、このルートURLだけが問題を起こしています。

答えて

2

私はこのルートをテストした:

 routes.MapRoute(
      "Final", 
      "{id}", 
      new { controller = "Root", action = "Index" }, 
      new { id = @"\d+" } 
     ); 

それはちょうどそれが必要として働いています。しかし、問題がある場合は、希望のURLがそれ以前の別のルートと一致していると推測しています。あなたの最初のルートとしてこのルートを置き、それがそれを修正するかどうかを確認してください。例えば

、あなたのルートは次のようになり場合:

 routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

     routes.MapRoute(
      "Final", 
      "{id}", 
      new { controller = "Root", action = "Index" }, 
      new { id = @"\d+" } 
     ); 

あなたは見つからない404のリソースを取得します。あなたはこのようにそれらを切り替えた場合でも:

 routes.MapRoute(
      "Final", 
      "{id}", 
      new { controller = "Root", action = "Index" }, 
      new { id = @"\d+" } 
     ); 

     routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults 
     ); 

は、その後、あなたは/1234のような要求に必要なルーティングを取得します。

+0

ルートを1つだけ有効にすると、ディレクトリの一覧が表示されます。代わりに/ user/22にリダイレクトされ、404エラーが出るはずです。 –

+0

@AkashKava Redirect *と*は404を取得しますか?私はあなたのコメントを理解していない。 –

+0

これはうまくいきました。すべてのルートを超えている必要がありました。また、私はIISエクスプレス設定でうんざりしていました。仮想ディレクトリが作成され、web.configと競合していました。 –