2017-07-17 17 views
0

2つの "RouteAttibute"フィルタの宣言を含むカスタムアクションフィルタ属性を作成する必要があります。2つのルート属性フィルタを含むMVCカスタムフィルタ

私が必要:

[Contains2Routes] 
public ActionResult Index() 
{ 
    return View(); 
} 

の代わりに:ヘルパーのための

[Route("~/index1")] 
[Route("~/index2")] 
public ActionResult Index() 
{ 
    return View(); 
} 

感謝を!

答えて

0

は、それはそれを行うための最善の方法ではないかもしれないが、あなたはそのようなカスタムルート属性でそれを達成することができます

[AttributeUsage(AttributeTargets.Class | AttributeTargets.Method, AllowMultiple = true, Inherited = false)] 
public sealed class MultiRouteAttribute : Attribute, IDirectRouteFactory 
{ 
    public string Name { get; set; } 

    public int Order { get; set; } 

    public string[] Templates { get; private set; } 


    public MultiRouteAttribute(string[] template) 
    { 
     this.Templates = template; 
    } 

    RouteEntry IDirectRouteFactory.CreateRoute(DirectRouteFactoryContext context) 
    { 
     var template = "~/{Type:regex(" + string.Join("|", Templates) + ")}"; 
     IDirectRouteBuilder builder = context.CreateBuilder(template); 
     builder.Name = this.Name; 
     builder.Order = this.Order; 
     return builder.Build(); 
    } 
} 

そして、あなたはそのようにそれを使用することができます:

[MultiRoute(new[] { "index1", "index2" })] 
public ActionResult Index() 
{ 
    return View(); 
} 

代わりに:

[Route("~/index1")] 
[Route("~/index2")] 
public ActionResult Index() 
{ 
    return View(); 
} 

このソリューションは、組み込みのRouteAttributeよりも制限されています。ルート内で正規表現を使用する

+0

まず第一に、パラメータ、デフォルト値、および制約を追加する場合はどうですか? –

関連する問題