2013-09-10 56 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"] < - 特定文化