2013-09-10 58 views
1

的区域是否可以具有两条路由的区域。例如:属性路由 - 带有可选路由参数

[RouteArea("{culture}/testarea")] <-- specific culture 
[RouteArea("testarea")] <-- default culture 
LocalizableAreaBaseController .... 

谢谢!

回答

1

您可以通过路由约束完成此操作。

public class TestAreaAreaRegistration : AreaRegistration 
{ 
    public override string AreaName 
    { 
     get 
     { 
      return "TestArea"; 
     } 
    } 

    public override void RegisterArea(AreaRegistrationContext context) 
    { 
     context.MapRoute(
      "TestArea_culture", 
      "{culture}/TestArea/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional }, 
      new { culture = @"^[A-Za-z]{2}(\-[A-Za-z]{2})$"} 
     ); 

     context.MapRoute(
      "TestArea_default", 
      "TestArea/{controller}/{action}/{id}", 
      new { action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 

或者

[RoutePrefix("{culture:regex(^[A-Za-z]{2}(\-[A-Za-z]{2})$)}/TestArea")] 
[RoutePrefix("TestArea")] 
public class TestController : ApiController { 
} 

(这种特殊的正则表达式约束将匹配像 “en” 或 “EN-GB”)

+0

嗨。 thx回复。但这将如何与AttributeRouting一起工作? – shkipper

+0

我添加了一个使用ASP WebApi 2.0 RoutePrefix属性的例子。 –

+0

但文化参数将在区域(testarea/en/...)之后,并且如果在之前(/ en/testarea/...) – shkipper

1

还有一个前缀,在RouteArea属性,请使用。这将起作用。

[RouteArea("testarea"),AreaPrefix="{culture}/testarea"] < - 特定文化