2017-08-12 11 views
1

まず、私はthis questionthis question を読んでいます。別の問題があると思います。すべてが同じだから。MVC5でルート属性を使用

私はMVC5プロジェクトを持っています。私には2つの領域があります。 まず、このような私のデフォルトのルートクラス。

public static void RegisterRoutes(RouteCollection routes) 
{ 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 
     routes.MapRoute(
     name: "Default", 
     url: "{controller}/{action}/{id}", 
    defaults: new { controller = "Welcome", action = "Index", id = UrlParameter.Optional}); 
} 

第1のエリアルート設定。

public override void RegisterArea(AreaRegistrationContext context) 
{ 
    context.MapRoute(
     "App_default", 
     "App/{controller}/{action}/{id}", 
     new { action = "Index", id = UrlParameter.Optional } 
    ); 
} 

この時点で問題はありません。今

このアプリ/コントローラ

public class AccountsController : Controller 
{ 
    // GET: App/Accounts 
    [Route("app/accounts/list/{Id}")] 
    public ActionResult List() 
    { 
     return View(); 
    } 
} 

、私のようにアクセスすることができます:しかし、私はこのようにしたい

  • はlocalhost /インデックス/インデックスOK
  • はlocalhost /アプリケーション/インデックス/インデックスOK
  • localhost/app/accounts/list/45646 ERR OR

エリアを使用して属性をルーティングするにはどうすればよいですか?私はそれを行うことはできません?

+0

'[ルート(「アプリ/アカウント/リスト/ {ID} ")]' [Route( "App/accounts/list/{Id}")] 'に変更' –

答えて

0

'localhost/app/accounts/list/45646' URLが機能するためには、List ActionResultのパラメータとして整数を受け取る必要があります。

public class AccountsController : Controller 
{ 
    // GET: App/Accounts 
    [Route("app/accounts/list/{Id}")] 
    public ActionResult List(int Id) 
    { 

      return View(); 
     } 
    } 
0

まずあなたが

public static void RegisterRoutes(RouteCollection routes) { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     //Enable attribute routing 
     routes.MapMvcAttributeRoutes(); 

     //Area registration should be done after 
     //attribute routes to avoid route conflicts 
     AreaRegistration.RegisterAllAreas(); 

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

をルーティング属性を有効にし、コントローラに適切な属性を追加する必要が

[RouteArea("AreaName", AreaPrefix = "app/accounts")] 
public class AccountsController : Controller { 
    [HttpGet] 
    [Route("list/{id:int}")] // Matches GET app/accounts/list/45646 
    public ActionResult List(int id) { 
     return View(); 
    } 
} 
関連する問題