2016-10-31 6 views
1

2つのルートが一致していますが、一致するには両方とも必要です。 GUIDやINTを文字列にする必要はありません。MVCルート属性が複数のコントローラタイプを検出しました

このルートは、他のものと一致しない場合にのみ実行する必要があります。

[Route("{slug}", Order = 1)] 

と、このルートは常に

[Route("eula", Order = 0)] 

任意のアイデアを取られるべきであるが、これを達成するためにどのようにですか?

RouteConfig.cs:

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

コントローラ:

エラーを再現 Route parameters and multiple controller types

: 私は順序が、それは私の正確な問題を表示しませ

んどうやらうまくいくかもしれないと思いました

public class HomeController : Controller 
{ 
    [Route("eula")] 
    public ActionResult Eula() 
    { 
     ViewBag.Message = "Your application description page."; 

     return View(); 
    } 
} 

public class SlugController : Controller 
{ 
    [Route("{slug}")] 
    public ActionResult SluggedUrl(string slug) 
    { 
     ViewBag.Message = "Your " + slug; 

     return View(); 
    } 
} 

答えて

1

スラグコントローラのルートがあまりにも一般的です。 Order属性は、同じコントローラ内のアクションにも適用されます。

提案:スラグ

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

    routes.MapMvcAttributeRoutes(); 

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

    //catch all route 
    routes.MapRoute(
     name: "Slug", 
     url: "{*slug}", 
     defaults: new { controller = "Slug", action = "SluggedUrl"} 
    ); 
} 

のための規則ベースのルートを追加および削除属性ルートフォームSlugController

public class SlugController : Controller { 
    public ActionResult SluggedUrl(string slug) { 
     ViewBag.Message = "Your " + slug; 

     return View(); 
    } 
} 

より具体的なeula属性ルートは、より一般的な前にマッチしてしまいますその方法slugルート

関連する問題