AttributeRouting - 具有可选路由参数的区域

时间:2013-09-10 20:16:29

标签: asp.net-mvc attributerouting

是否可以有两条路线的区域。例如:

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

谢谢!

2 个答案:

答案 0 :(得分: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”)

之类的东西

答案 1 :(得分:1)

在RouteArea属性中有另一个前缀请使用它。这将有效。

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